2012-08-16 121 views
1

失敗我有一個小腳本,設置標題強制zip文件的下載與:大拉鍊下載只能在IE

if(ini_get('zlib.output_compression')) { 
     ini_set('zlib.output_compression', 'Off'); 
     } 
    header("Pragma: public"); 
    header('Expires: '.gmdate('D, d M Y H:i:s').' GMT'); 
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
    header("Cache-Control: private",false); 
    header("Content-Description: File Transfer"); 
    header("Content-type: application/octet-stream"); 
    header('Content-Disposition: attachment; filename="'.$mp3.'"'); 
    header("Content-Transfer-Encoding: binary"); 
    header("Content-Length: "[email protected]($file)); 
    @readfile($file) OR die("<html>...</html>"); 
    exit; 

一切工作在Chrome和Firefox罰款,但在IE 9我有失敗嘗試了許多不同的方式來設置這些標頭後谷歌搜索,但沒有任何幫助。然後我嘗試了一個更小的zip文件,它工作!然後我嘗試了一個更大的zip文件,並再次失敗。這是一些設置在服務器或php.ini什麼的?它爲什麼隻影響IE?

當它在IE失敗,它看起來像它下載..說完成。但該文件是0字節。

感謝您的幫助!

+0

有多大?超過2GB? – 2012-08-16 00:28:34

+0

oh no .. like 80,000 kb – Zac 2012-08-16 01:00:47

+0

IE始終將文件首先下載到其緩存中,然後將其複製到最終目的地。我想知道IE是不是在完成後立即從緩存中刪除文件,因爲它已經過期了。 – cleong 2012-08-16 01:43:41

回答

2

如果該文件是足夠大,你可能有與內存,執行時間的問題,等等。

而不是試圖讀取該文件,你可以使用X-sendfile的頭:

header('x-sendfile: '.$file); 

看看這篇文章吧:http://www.jasny.net/articles/how-i-php-x-sendfile/

+0

我在想,但我不明白爲什麼內存問題會與瀏覽器相關..並且該文件不是真的那麼大(80,000 kb)。我更新了我的帖子,以解釋IE如何失敗..它實際上像一切都好,但它是一個0kb的文件。感謝您提供的替代方案,但我不認爲我有權改變此服務器上的Apache,並沒有修復任何東西后,我只是在那裏打了x-sendfile。 – Zac 2012-08-16 01:02:03

+0

是的,這是一個棘手的問題。嘗試使用像charles這樣的http代理(http://www.charlesproxy.com/)。查看IE與其他瀏覽器的標題,看看是否有任何區別。它可能是你的服務器處理IE請求的方式不同? – 2012-08-16 01:15:52

+0

啊我想通了..我有文件路徑錯誤: - /其他瀏覽器讓它滑動,但IE需要一個絕對路徑。 – Zac 2012-08-16 01:20:25