【问题标题】:Clear Apache cache for a specific image清除特定图像的 Apache 缓存
【发布时间】:2013-08-16 03:51:47
【问题描述】:

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

当图像被编辑时,我想在网站的所有页面(它被调用的地方)上显示它的最新版本,至少对于编辑图像的用户来说是这样。

现在我正在寻找一种比在末尾添加时间戳更好的方法来清除特定图像的缓存:

<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状态”的图像,而不是“304修改”。

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

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

【问题讨论】:

    标签: php image caching


    【解决方案1】:

    整个问题都非常混乱。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-23
      • 1970-01-01
      • 2012-02-05
      • 2011-02-22
      • 1970-01-01
      • 2016-04-28
      • 1970-01-01
      相关资源
      最近更新 更多