清除特定映像的Apache缓存

时间:2013-08-14 09:13:45

标签: php image caching

我实施了一个系统来编辑网站上显示的图像。

编辑图像时,我想在网站的所有页面(称为图像)上显示其最新版本,至少对于编辑图像的用户而言。

现在我正在寻找一种更好的方法来清除特定图像的缓存,而不是在最后添加时间戳:

<img src="myimage.jpg?01215654" alt="" />

为什么?

它假设总是在图像路径的末尾添加时间戳,例如使用会话系统。

但是当会话到期时(例如,用户离开网站,并在几小时后返回),将显示图像的真实路径:

<img src="myimage.jpg" alt="" />

导航器随机显示旧图像或最后一个版本......因为Apache缓存了:

  • myimage.jpg作为旧图像
  • myimage.jpg?01215654作为新版本,因为之前没有人点击它(作为新媒体加载)

限制

  • 我无法更改已编辑图像的路径,例如“myimage.jpg”到“myimage-v2.jpg”,这可以解决问题......
  • 图像不是从控制器提供的(不是从PHP脚本提供的),它们是从服务器上的路径直接加载的。
  • 我不想使用在JS的图像路径末尾添加时间戳或版本字符串的会话系统。

我想要什么

我想说“myimage.jpg”的缓存已过期,因此显示最后一个版本,然后正常缓存,直到下一版。所以我想在编辑后加载图像为“200 status”,而不是“304 modified”。

注意:编辑图像时,我用隐藏的div中的JS(JQuery)重新加载它,如果你现在有办法更改缓存标题?

所以我想要的是清除编辑的特定图像的缓存头,考虑到我的项目的限制,所以如果可能的话,通过使用缓存指令而不从控制器提供图像,是否可能?< / p>

1 个答案:

答案 0 :(得分:0)

整个问题非常困惑。

Apache缓存? ...不,缓存在浏览器中,而不在Apache中。

为图像网址添加时间戳的会话? ...不,必须使用服务器端脚本(例如PHP)将带有时间戳的查询字符串添加到HTML中。它与浏览器会话无关。 (实际上,使用文件最后修改时间而不是当前时间戳BTW通常要好得多。

有多种方法可以达到您想要的效果,每种方法都有其自身的优点和缺点,具体取决于您的情况。您可能希望阅读我的回答here