2010-07-18 100 views
1

我有一個php腳本,我用了多年來強制從我的網站下載。但有時在上個月左右,它停止工作,並觸發文件未找到錯誤。奇怪的是,在Firefox中,如果我在錯誤頁面上查看源代碼,那是我正在嘗試下載的文件。並從文件>保存從那裏給你正確的文件。所以我知道這不是腳本在服務器上找不到文件的問題。強制下載停止工作

我是如何設置標題的?

header("Pragma: public"); 
header("Expires: 0"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Cache-Control: private",false); 
header('Content-Type: application/octet-stream'); 
header('Content-Transfer-Encoding: Binary'); 
header('Content-length: '.filesize($file_url)); 
header('Content-disposition: attachment; filename="'.basename($file_url).'"'); 
readfile($file_url); 
+0

'$ file_url'的值是多少? – Artefacto 2010-07-18 13:29:35

+0

這是要下載的文件的路徑。我發佈的只是用於觸發下載的代碼。我知道第一個想法是路徑是錯誤的,但它不是查看源並保存生成正確的文件。 – unholysampler 2010-07-18 13:44:50

回答

0

我結束了作弊的工作。

header("Location: $file_url"); //file_url is now the real url, not the path 

然後使用的cPanel,以確保我所用的所有MIME類型分別設置爲application/octet-stream

1

你可以試試這個功能嗎?

function force_download($file){ 
    header('Content-Description: File Transfer'); 
    header('Content-Type: application/octet-stream'); 
    header('Content-Disposition: attachment; filename='.basename($file)); 
    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: ' . filesize($file)); 
    readfile($file); 
    exit; 
} 
+0

對不起,相同的結果。 – unholysampler 2010-07-18 14:28:34

+1

有點偏離主題,當每個人想要提供文件時添加post-check = 0和pre-check = 0會怎樣?這是其中一件事情,它不會真正做任何事情,只是複製粘貼... https://blogs.msdn.com/b/ie/archive/2006/06/01/613132.aspx – kander 2010-07-18 15:31:45

+0

@unholysampler - 你是否使用chrome瀏覽器,因爲我在chrome中看到了相同的錯誤。它無法呈現標題。 – Shubham 2010-07-19 07:05:20