PHP强制文件下载在Internet Explorer中失败

时间:2012-10-10 14:56:29

标签: php internet-explorer content-type

我有一个网站,我正在使用以下代码强制通过PHP下载文件:

$ZipData = file_get_contents($zipFilename);
$ZipSize = filesize($zipFilename);
header("Content-type: application/octet-stream");
header("Content-disposition: attachment; filename=".$ZipTitle.".zip");
echo $ZipData;

虽然这在Chrome和Firefox中完美运行,但它在Internet Explorer中什么都不做。谷歌搜索时,我发现了一个潜在的解决方案,并将代码更改为:

$ZipData = file_get_contents($zipFilename);
$ZipSize = filesize($zipFilename);
if (strstr($HTTP_USER_AGENT,"MSIE")){
    header("Pragma: public");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Content-type: application-download");
    header("Content-Length: $ZipSize");
    header("Content-disposition: attachment; filename=".$ZipTitle.".zip");
    header("Content-Transfer-Encoding: binary");
}else{
    header("Content-type: application/octet-stream");
    header("Content-disposition: attachment; filename=".$ZipTitle.".zip");
}
echo $ZipData;

但仍然没有运气。我不知道为什么它会失败,也不知道从哪里开始寻找错误或问题,这只是一些I.E.我不知道的错误?我应该从哪里开始尝试寻找解决方案?

注意:$ ZipTitle将始终为'TexturePacker_Pack_xxx',其中xxx是递增的数字。 $ ZipFilename是一个现有的zip文件,在文件发送到浏览器后取消链接。

修改:相关网站和代码在http://www.texturepacker.net

上有效

1 个答案:

答案 0 :(得分:0)

您的Content-Length标题似乎不正确。 PHP filesize expects a string并返回一个int。

将其更改为实际获取磁盘上文件的大小:

$zipFile = "C:\ZipFile.zip";  
header("Content-Length: " . filesize($ZipFile));