我怎么知道显示的图像是缓存的?

时间:2011-09-24 05:48:14

标签: php caching

我正在使用具有缓存引擎的timThumb。正如脚本/教程所说,你必须拥有一个权限为0777的缓存文件。这就是我已经拥有的。

在页面中查看图像时,使用以下

timthumb.php?src=http://farm3.static.flickr.com/2340/2089504883_863fb11b0a_z.jpg

它在缓存文件夹中创建一个9c9313eced007f38eb59791dad91edb1.jpg文件。

我检查了图像,它和我看到的一模一样。在我下次刷新时,我查看了页面源代码,然后又重新开始了

timthumb.php?src=http://farm3.static.flickr.com/2340/2089504883_863fb11b0a_z.jpg代替缓存的图片。

我的问题是,不应该显示domain.com/9c9313eced007f38eb59791dad91edb1.jpg

这是我使用的代码http://codepad.org/pVzET9Dv(它是一个接受所有域的修改版本)

注意:我也尝试了官方发布,但同样如此。也许这就是缓存是如何工作的,我不知道..但如果是这样的话,我怎么能检查我看到的是缓存?

2 个答案:

答案 0 :(得分:1)

你对这里的缓存概念有错误的想法。

请注意,当文件位于cache_dir时,php会检查用户是否向他发送了标头HTTP_IF_MODIFIED_SINCE

如果浏览器发送此标头,则表示浏览器具有此文件的本地副本,该文件在下载时的Last-Modified值为HTTP_IF_MODIFIED_SINCE

现在,如果此日期确实是图像的最后修改日期,则服务器会发送标题HTTP/1.1 304 Not Modified

请注意检入功能show_cache_file


还有一件事,似乎php正在重新调整图像大小并将重新调整大小的图像保存在自己的缓存文件夹中。因此,通过这种方式,重新调整大小的过程不会再次重复。


我不知道是否有浏览器可以让您知道显示的图像是从缓存中提取还是下载。无论如何,这是无关紧要的,因为用户必须确定它是最新的图像。

答案 1 :(得分:0)

网址timthumb.php?src=http://farm3.static.flickr.com/2340/2089504883_863fb11b0a_z.jpg  不会改变。脚本的逻辑是这样的:


我收到了一张图片的网址“http://farm3.static.flickr.com/2340/2089504883_863fb11b0a_z.jpg”

我是否在磁盘上有一个未过期的缓存副本?

否:从“http://farm3.static.flickr.com/2340/2089504883_863fb11b0a_z.jpg”中查找图像,将其写入缓存,然后显示。

是:从磁盘读取文件并显示它。


所以即使你说图像在这里(通过查询字符串参数src =)“http://farm3.static.flickr.com/2340/2089504883_863fb11b0a_z.jpg”这并不意味着脚本实际检索到它每次都在那里。

我会说你的权限是正确的,并且缓存文件正被写入文件夹,这足以验证它是否正常工作。

除此之外的任何类型的验证都会浪费时间。