2010-05-03 38 views
0

仅当文件自上次访问后发生更改时才会提供新内容。如何在PHP中实现这个缓存控制策略?

我该如何实施?

UPDATE

遗憾没能更早提及,但所请求的资源是直接要求,而不是一个图像的网页。

+0

它是一个静态的'.html'页面还是'.php'页面?浏览器不会缓存动态页面('.php','.asp'等) – Andy 2010-05-03 16:52:00

+0

它是'.php',我们可以改变这种行为吗? – user198729 2010-05-03 16:54:20

+0

我不这么认为,你必须把你的脚本的输出写到一个'.html'文件并代替它。 – Andy 2010-05-03 16:57:22

回答

2

您可以使用从轨道借用一招,最后文件的修改时间追加到包括:

$fileName = 'image.jpg'; 
$httpLink = $fileName . '?' . filemtime($fileName); 
echo '<img src="', $fileName, '" alt="blah" />'; 

这将输出像

<img src="image.jpg?1002412" alt="blah" /> 

然后,当文件发生变化时,一个链接查询字符串也将更改,浏览器将请求“新”文件即

<img src="image.jpg?1003622" alt="blah" /> 

或者,您可以保留文件修订版的本地日志,并从数据库中读取版本号,而不是文件系统,这可能稍微快一些(并且保存文件系统读取,尽管它没有显着差异 - 取决于数据库与Web服务器负载)。

+0

嘿,多漂亮的主意! 'filemtime'在性能上也相当简单。太好了! – 2010-05-03 16:43:21

+0

现在,这是一个很棒的技巧,不知道那个:O – lamas 2010-05-03 16:43:22

+0

如果你使用PATH_INFO,这将工作**更好**(如果URL不以扩展名结束,浏览器可能会挑剔)。 – 2010-05-03 16:45:23