2017-03-01 10 views
0

私のディレクトリからいくつかのパブリックファイルへの直接アクセスをブロックします。たとえば、私はimage.pngというファイルを持っていて、そのファイルをダウンロードするにはcaptchaを埋めなければなりません。キャプチャに失敗した場合、ユーザーがファイルにアクセスできないようにします。 Symfonyでこれを行う方法はありますか?Symfonyを使用して直接ダウンロードをブロックする

+1

これらのファイルをパブリックディレクトリの外に移動し、コントローラを渡すことによってそれらを提供することをお勧めします(下記の@ Jeetの回答を参照)。 – Gerry

答えて

2

まず、画像ディレクトリ内に.htaccessというファイルを作成して、ディレクトリ内のファイルに直接アクセスしないようにします。

Deny from All 

さて、あなたは簡単にGregwar's CaptchaBundleのようないくつかのバンドルを使用してcaptchaを統合することができる場所、ファイルをダウンロードしcontrollerて、カスタマイズされたパスを与えます。

captcha検証に成功した場合は、Responseからファイルをダウンロードしてください。

$filename = __DIR__ . "../path_to_file/image.png"; 

// Generate response 
$response = new Response(); 

// Set headers 
$response->headers->set('Cache-Control', 'private'); 
$response->headers->set('Content-type', mime_content_type($filename)); 
$response->headers->set('Content-Disposition', 'attachment; filename="' . basename($filename) . '";'); 
$response->headers->set('Content-length', filesize($filename)); 

// Send headers before outputting anything 
$response->sendHeaders(); 
$response->setContent(file_get_contents($filename)); 

注:コードはテストされていません!

希望すると便利です。

+0

あなたの返信ありがとう!私はそれが正常に動作することができると思うが、ちょうど最後の質問です。私はサーバとしてNginxを使用していますが、htaccessを作成しましたが動作しませんでした。そのNginxサーバや別のものが原因であるかどうかわかりません。 –

+0

'Nginx'サーバ設定ファイルを変更する必要があります。私は 'Nginx'サーバの設定に直接経験はありません。 [変換ツール](https://winginx.com/en/htaccess)、[構成](http://serverfault.com/a/267510/401780)の2つのリンクに従ってください。 – Jeet

関連する問題