【问题标题】:How to prevent browser image caching?如何防止浏览器图像缓存?
【发布时间】:2012-01-05 20:37:41
【问题描述】:

在 PHP 中防止浏览器缓存图像的最佳方法是什么?

我试过 header( 方法:

header("Expires: Tue, 03 Jul 2001 06:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

但除了手动清除浏览器的缓存之外,似乎没什么用。

我有图像被替换为相同的名称,例如 avatar.png 作为用户的可更新头像,但是当它更新时,浏览器会保留旧版本。 p>

即使删除了原始文件并添加了新文件,浏览器仍会保留旧的 avatar.png

有什么想法吗?

【问题讨论】:

    标签: php image caching


    【解决方案1】:

    只需在图片 URL 的末尾添加一个随机参数即可。时间戳也可以很好地用于此。

    以 PHP 为例:

    "http://domain.com/img.png?t=" . time();
    

    浏览器将始终加载此图像新。不过你应该小心使用它,它会使加载时间变慢。

    【讨论】:

    • 工作就像一个魅力!感谢您的提示!
    • 坏主意。每次显示图像时都强制从服务器重新加载,这是完全没有必要的。而且您还没有提到设置标头以防止缓存,因此这些重新加载的图像中的每一个都将单独缓存在您的机器上以及您和服务器之间的任何中间缓存上。 WIRELESS 的建议要好得多,而且同样简单。
    【解决方案2】:

    只要您插入自己的图片,就无需每次都阻止图片缓存。您可以只使用 filemtime($imgPath) 检查最后一张图片更改时间。

    例如:'http://example.com/img.jpg?last_picture_update='。文件时间($imgPath)

    【讨论】:

    • 实际上大多数缓存清除机制都使用类似的方法。必须注意某些代理服务器会忽略查询部分,因此最好使用类似 "http://example.com/img" . filetime($imgPath) . ".jpg" 的内容,然后使用 .htaccess 去除数字部分。
    【解决方案3】:

    在同一个浏览会话中,如果您使用同一个 IMG src,浏览器通常会重新使用其保留在内存中的图像副本,而不管缓存设置如何。这似乎就是你这里发生的事情。

    我总结了一些“更新图像”问题的常见解决方案here

    【讨论】:

      【解决方案4】:

      谢谢你,像这样为我奔跑

      不运行

      echo "&lt;img src='gambarLimas.jpg'><br>"; 
      

      运行良好

      echo "&lt;img src='gambarLimas.jpg?t=".time()."'><br>"; 
      

      【讨论】:

      • 嘿,Dody,尝试将标签编码以分隔代码,并解释为什么您的解决方案可以使用注释。欢迎加入社区。​​span>
      猜你喜欢
      • 2011-11-07
      • 2011-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      相关资源
      最近更新 更多