嘗試讓使用者從伺服器下載檔案時,如下所示的常見解決方案可能不起作用:
header('Content-Description: File Transfer'); header('Content-Type: image/png'); header('Content-Disposition: attachment; filename="Image.png"'); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); header('Content-Length: ' . $size); readfile("Image.png");
儘管控制台顯示了正確的標題,但儲存對話框可能不會出現。
關鍵錯誤在於 Content-Type 標頭。對於文件下載,它不應該是image/png,而是:
header('Content-Type: application/octet-stream');
文件下載的可靠標頭集如下:
$quoted = sprintf('"%s"', addcslashes(basename($file), '"\')); $size = filesize($file); header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename=' . $quoted); header('Content-Transfer-Encoding: binary'); header('Connection: Keep-Alive'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); header('Content-Length: ' . $size);
透過確保正確發送標頭後,當使用者嘗試從伺服器下載檔案時,系統會提示使用者儲存對話方塊。
以上是如何使用 PHP 標頭可靠地強製檔案下載?的詳細內容。更多資訊請關注PHP中文網其他相關文章!