1

我有一个小脚本,它设置标题以强制下载 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 中失败。我在谷歌搜索后尝试了许多不同的方法来设置这些标题,但没有任何帮助。然后我尝试了一个不同的较小的 zip 文件,它成功了!然后我尝试了一个更大的 zip 文件并再次失败。这会是服务器或 php.ini 上的一些设置吗?为什么它只影响IE?

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

谢谢你的帮助!

4

1 回答 1

2

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

您可以使用 x-sendfile 标头,而不是尝试读取文件:

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

查看这篇关于它的文章:http ://www.jasny.net/articles/how-i-php-x-sendfile/

于 2012-08-16T00:38:16.080 回答