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() 就可以啦。
当然,还可以通过参数,配置文件名和文件类型。
大伙儿看看吧,这是我给互联网的贡献~~
好东西!支持一个!
非常感谢!帮我解决了难题。