消除Excel文档的caching

我有一个PHP脚本,只需要一些数据,将其分隔成制表符分隔的格式,将其保存为一个.xls文件,然后给用户一个链接,下载它。

大多数情况下都能正常工作,但有些人正在获取导出的.xls文件的caching版本。

我想我需要做的是不给用户直接链接到.xls文档,给他们一个链接一个PHP页面是这样的:

deliver_excel_doc.php?文件= some_excel_file.xls&

那么deliver_excel_doc.php从excel文件中提取数据,但是会对头文件做一些事情,所以excel文件不会被caching,然后以xls的forms输出,这样文件就会被下载(或者在excel中渲染)。

关于如何做到这一点的任何想法(这个概念是可行的)?

只需将时间戳添加到获取Excel文件的链接,例如

printf('<a href="file.xls?%d">Excel File</a>', time()); 

由于时间戳总是不同的,他们的浏览器不会caching文件。

你可以根据你的写法来版本化你的url,但是不要这样做,发送正确的头文件:

 <?php header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past ?> 

如果客户端caching你的PHP的输出,那么你的问题比你想象的要大得多!

erenon是正确设置caching指令的一部分,但是如果你使用过期的cachingdate,那么你会发现Excel通常无法打开文档(如果通过MSIE访问的话)。 一个更好的解决scheme是将来设置到期时间只需几秒钟,然后让代理不要caching它:

 if ($_SERVER['SERVER_PROTOCOL']=='HTTP/1.0') { header("Expires: " . date('r', time()+3)); } else { header("Cache-Control: max-age=3, private, must-revalidate"); } 

虽然HTTP / 1.1将支持Expires头,但为了达到预期的效果,客户端时钟必须与服务器时钟同步。

(请注意,如果不设置时区,则date()会引发警告)

C。