在 Symfony2 中強製檔案下載
處理下載連結上的使用者點擊事件時,目的是提示使用者儲存檔案。然而,在 Symfony2 中,嘗試啟動檔案下載通常會導致不期望的結果。
一種方法涉及手動指定回應標頭:
<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 錯誤。
至避免這些問題,請考慮使用 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中文網其他相關文章!