管理者バックエンドを備えた symfony 1.4 アプリケーションがあり、認証されたユーザーのみが一部の pdf / 画像を利用できるようにしたいと考えています。認証プロセスは symfony によって処理されます。
php の memory_limit 設定を超えるファイルであっても、認証されたユーザーだけがファイルをダウンロードできるようにするにはどうすればよいですか?
私が使っているWebサーバーはnginxです。
管理者バックエンドを備えた symfony 1.4 アプリケーションがあり、認証されたユーザーのみが一部の pdf / 画像を利用できるようにしたいと考えています。認証プロセスは symfony によって処理されます。
php の memory_limit 設定を超えるファイルであっても、認証されたユーザーだけがファイルをダウンロードできるようにするにはどうすればよいですか?
私が使っているWebサーバーはnginxです。
X-Sendfile
(/ )を使用するX-Accel-Redirect
と、PHPスクリプトが適切なヘッダーを送信して終了した後、nginxがファイルを提供します。これは適切な説明のようです。
greg0ire>これがsymfony1.4とnginxを使った私の実装です:
Nginx構成:
location /secure/ {
internal;
}
symfonyルーティング
SecureDownload:
url: /anything-you-want-but-secure/:filename
options:
segment_separators: ['/'] # filenames often contain dots
params:
module: YourModule
action: secureDownload
symfonyアクション
<?php
class SecureDownloadAction extends sfAction
{
public function execute($request)
{
$this->getResponse()->setHttpHeader(
"X-Accel-Redirect",
"/secure/" . $request->getParameter('filename'));
$this->getResponse()->setHttpHeader(
"Content-Disposition",
"attachement; filename=". $request->getParameter('filename'));
return sfView::HEADER_ONLY;
}
}