Symfony2 でのファイルのダウンロードの強制
ダウンロード リンクでのユーザーのクリック イベントを処理するときの目的は、ユーザーにファイルの保存を促すことです。ただし、Symfony2 では、ファイルのダウンロードを開始しようとすると、望ましくない結果が生じることがよくあります。
1 つのアプローチには、応答のヘッダーを手動で指定することが含まれます。
<code class="php"> $response = new Response(); $response->headers->set('Content-type', 'application/octect-stream'); $response->headers->set('Content-Disposition', sprintf('attachment; filename="%s"', $filename)); $response->headers->set('Content-Length', filesize($filename));</code>
ただし、このアプローチでは、ダウンロードが失敗する可能性があります。ダイアログにファイル サイズ 0 バイトが表示されます。
Content-Transfer-Encoding ヘッダーを含めると、この問題に対処できます:
<code class="php"> $response->headers->set('Content-Transfer-Encoding', 'binary'); $response->setContent(readfile($filename));</code>
ただし、これにより、読み取り不能な文字のストリームが生成される場合があります。
別の方法は、setContent 関数と file_get_contents() 関数を利用することです。
<code class="php"> $response->setContent(file_get_contents($filename));</code>
このアプローチでは、メモリ制限に関連する PHP エラーが発生する可能性があります。
Toこれらの問題を回避するには、BinaryFileResponse クラスの使用を検討してください。
<code class="php">use Symfony\Component\HttpFoundation\BinaryFileResponse; use Symfony\Component\HttpFoundation\ResponseHeaderBag; $response = new BinaryFileResponse($file); $response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT);</code>
この解決策は簡単かつ簡単で、目的のファイル ダウンロード動作を容易にします。
以上がSymfony2 でファイルの強制ダウンロードを開始するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。