PHP 文件下载 IE 无法打开页面

IE 又有一个弱得不行的问题让我发现!

有个项目,要限制文件的下载权限,只有注册用户才可以下载,用户登录后,点击下载链接,弹出保存附件的提示。

我用 PHP 写了一个下载类,支持断点续传的。

今天发现一个问题,在 IE 7 下,点击链接,可以弹出对话框,提示 “打开”、”保存” 和 “取消”,点击打开没问题,点击保存,却马上弹出错误提示 “该页面无法打开”!

这时可以注意到一个细节,弹出保存对话框的时候,正常情况下窗口左边会根据文件类型显示图标,而此时却是一个没有类型的默认图标。

我怀疑是 PHP 在设置 Http Header 的时候有问题,仔细检查了每一项,逐项注释,问题依旧。

可是同样的链接,在 Firefox、Opera 和 Safari 下都没问题,打开或保存都正常。

后来去网上搜了好多文件下载的 header 设置,发现我少了 2 个属性:

Expires 和 Cache-Control,我想起来我以前写过一个 Case,说要加 Cache-Control,否则用IE 打开文件会提示 “文档已损坏”:

http://www.leakon.com/archives/76

这提醒了我,我应该加上 Cache-Control 的。

果然,加上下面这 2 行,问题就完全解决:
header(‘Expires: 0’);
header(‘Cache-Control: must-revalidate, post-check=0, pre-check=0’);

全部代码请见我的 GoogleCode:

http://leakon.googlecode.com/svn/trunk/leakon/php/iplimit/smart_download.php

这是支持短点续传的哦,很好用。

使用很简单,用文件绝对路径 new 一个对象,然后调用 $obj->download() 就可以啦。

当然,还可以通过参数,配置文件名和文件类型。

大伙儿看看吧,这是我给互联网的贡献~~

Tags: , ,

2 comments

Leave a Reply

Your email address will not be published.

*