首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >消除Excel文档的缓存

问消除Excel文档的缓存
EN

Stack Overflow用户
提问于 2010-02-10 15:57:20
回答 3查看 2.5K关注 0票数 1

我有一个PHP脚本,它简单地接受一些数据,将其分割成标签分隔格式,将其保存为一个.xls文件,然后给用户一个链接来下载它。

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

我认为我需要做的不是给用户一个指向.xls文档的直接链接,而是给他们一个链接一个PHP页面,如下所示:

deliver_excel_doc.php?file=some_excel_file.xls&

然后,deliver_excel_doc.php从excel文档中提取数据,但是使用头文件执行一些操作,这样excel文档就不会被缓存,然后输出为xls,这样文件就会被下载(或者在excel中呈现)。

对我如何做到这一点有什么想法(这个概念可行吗)?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-02-10 16:03:10

只需在获取Excel文件的链接中添加时间戳即可。

代码语言:javascript
复制
printf('<a href="file.xls?%d">Excel File</a>', time());

因为时间戳总是不同的,所以他们的浏览器不会缓存文件。

票数 5
EN

Stack Overflow用户

发布于 2010-02-10 15:59:51

您可以在编写时对urls进行版本化,但不需要这样做,而是发送适当的标题:

代码语言:javascript
复制
<?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
?>
票数 8
EN

Stack Overflow用户

发布于 2010-02-10 16:30:52

如果客户端正在缓存PHP的输出,那么您有一个比您想象的更大的问题!

在正确设置缓存指令方面,erenon是部分正确的,但是,如果您使用过期的缓存日期向它提供服务,那么您会发现Excel经常无法打开文档(如果它通过MSIE访问)。一个更好的解决方案是在未来的几秒钟内设置一个到期时间,并要求代理程序不要缓存它:

代码语言:javascript
复制
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将支持过期的报头,但要使其正常运行,客户端时钟必须与服务器时钟同步。

(注意,如果不设置时区,date()会抛出警告)

结果表明,C.

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2238216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档