2012-08-16 120 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