5

我有一个脚本,它接收一个加密的 url 并从中生成一个下载,脚本中最关键的部分是这样的:

$MimeType = new MimeType();
$mimetype = $MimeType->getType($filename);
$basename = basename($filename);
header("Content-type: $mimetype");
header("Content-Disposition: attachment; filename=\"$basename\"");
header('Content-Length: '. filesize($filename));
if ( @readfile($filename)===false ) {
  header("HTTP/1.0 500 Internal Server Error");
  loadErrorPage('500');
}

下载在除 IE 之外的任何浏览器中都具有魅力,我已经看到与“无缓存”标头相关的问题,但我没有发送类似的内容,他们谈论的是 utf-8 字符,但没有任何utf-8 characters(和 $filename也没有任何 utf-8 字符)。

4

3 回答 3

8

我通过发送标题解决了它

header('Pragma: public');
header('Cache-Control: max-age=0');

我不知道 session_start() 自己发送标头。

我在以下评论部分找到了答案:错误:Internet Explorer 无法从 WebServer 下载文件名

于 2008-09-22T20:59:05.520 回答
3

该站点在 IE6 中存在与您类似的问题。总结一下:

session_start() 默认发送一个包含“no-store”的缓存控制头。Internet Explorer 有点过于字面意思了,但没有针对这种情况进行适当的错误处理,因此当您尝试将输出页面保存到磁盘时会神秘地爆炸。

在 session_start() 之前,添加“session_cache_limiter('none');”,或者查找该函数并根据需要调整限制器(可能“私有”更接近标记)。

我意识到您发布的代码片段不包括对 的调用session_start();,但我想我会分享这个可能的解决方案,以防您确实调用它但没有向我们展示。

于 2008-09-22T20:30:47.133 回答
0

用这个

在 IE7 浏览器中转到 Internet 选项--> 安全性---> 自定义级别 ---> 下载,然后启用自动提示文件下载。

这将解决问题。

希望这会有所帮助

于 2008-10-29T10:29:12.783 回答