大型zip下载仅在IE中失败

时间:2012-08-16 00:24:19

标签: php internet-explorer http-headers

我有一个小脚本设置标题以强制下载zip文件:

    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: ".@filesize($file));
    @readfile($file) OR die("<html>...</html>");
    exit;

在Chrome和Firefox中一切正常但在IE 9中失败。我在google搜索后尝试了许多不同的方法来设置这些标题,但没有任何帮助。然后我尝试了一个不同的小zip文件,它工作了!然后我尝试了一个更大的zip文件并再次失败。这会是服务器或php.ini上的一些设置吗?为什么它只影响IE?

当它在IE中失败时,它看起来像下载..说完了。但该文件是0字节。

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

如果文件足够大,您可能会遇到与内存,执行时间等相关的问题。

您可以使用x-sendfile标头:

,而不是尝试读取文件
header('x-sendfile: '.$file);

查看此文章:http://www.jasny.net/articles/how-i-php-x-sendfile/