我有以下代碼來推送zip文件進行下載。PHP:強制下載不起作用
$filename = "ResourcePack_".time().".zip";
$destination = $basepath."downloads/$filename";
if($this->createdownload($files,$destination,false)){
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Length: ". filesize("$destination").";");
header("Content-Disposition: attachment; filename='$filename'");
header("Content-Type: application/octet-stream; ");
header("Content-Transfer-Encoding: binary");
ob_end_flush();
@readfile($destination);
if(file_exists($destination)){
unlink($destination);
}
}
我知道createdownload功能工作,以生成壓縮文件就好了,因爲我看到在服務器上創建的文件。問題是文件正在被寫入瀏覽器作爲一堆垃圾,而不是打開一個下載流。我在頭文件中丟失了什麼嗎?
編輯
我說得對。我的問題不在於php,而是調用通過JQuery $ .ajax調用生成此代碼的php文件是問題。使用$ .ajax會自動將Accept-Encoding請求標頭設置爲與zip文件不兼容的值。因此,使用$ .ajax的intead我只是使用了一個簡單的window.open javascript命令來調用相同的PHP頁面,它的工作原理與標題一致。
嘗試閱讀手冊頭()。有很多人爲強制下載而做出的功能,例如http://us3.php.net/manual/en/function.header.php#102175 –
爲什麼不在啓動之前檢查文件是否存在?因爲如果它不存在,'filesize'將會失敗。 –
我已經讀過它後退和前進。就我所知,我的代碼與其他許多地方相匹配。我在這裏是因爲如果手冊中有些東西可以幫助我解決這個問題,我很想念它。 – LoneWolfPR