【问题标题】:Ho to deal with images saved localy in cache when you update a website?更新网站时如何处理本地保存在缓存中的图像?
【发布时间】:2013-04-30 08:47:38
【问题描述】:

当我将新内容上传到我的网页示例新图像时,当我连接到网页时,我仍然看到旧图像,即使当我查看代码时我看到了新内容。

我怀疑内容在我的浏览器上保持本地缓存,因此只有当缓存已满或被清除时,我才会看到新内容。

谁能告诉我是否可以允许用户在我上传后立即看到我上传的新内容而无需清除缓存。

我可以为本地用户禁用它吗?

【问题讨论】:

    标签: php web-applications image-processing web ftp


    【解决方案1】:

    最简单的方法是,每当你修改文件时,你给它一个新的文件名。

    或者,您可以附加时间戳。粗略的版本是这样的:

    <img src="images/foo.gif?t=<?php echo time(); ?>" />
    

    但是,这会导致图像每次都重新加载。更好的版本是:

    <img src="images/foo.gif?t=<?php echo filemtime($siteRootDir . '/images/foo.gif'); ?>" />
    

    这将打印文件本身的修改时间戳,因此只有在文件实际修改时才会请求新版本。显然$siteRootDir 必须有一个相关的值。

    【讨论】:

      【解决方案2】:

      您可以在&lt;img/&gt; 标记中的网址末尾添加一个简单的?&lt;?php echo time();?&gt;,但这会强制页面每次重新加载图像.. 不仅仅是在您更新它们时。

      【讨论】:

        【解决方案3】:

        一种常见的方法是在图像调用后面添加一个 GET 字符串。

        在配置中的某处设置字符串:

        <?php $version = "xyz123"; ?>
        

        现在将字符串添加到您的图像、脚本或 css 调用中:

        <img src="path/to/image.png?<?php echo $version; ?>"/>
        

        每当您更改内容时,请修改版本字符串以强制更新外部文件。

        【讨论】:

        • 您要对每张图片都这样做吗?或者只是一个字符串,所以当它发生变化时,网站中的每张图片都会被重新请求?
        • 配置文件中的一个字符串,每次更新代码时都会修改。不过,将“echo $version”sn-p 添加到每个图像调用中是一次性的工作。
        • 有趣,我从没见过这个。如果您同意强制每个客户重新加载站点中的每个图像,那么每当更新任何一个图像时,我不明白为什么不这样做。 (我想这取决于您使用的图片数量以及它们通常的动态程度)。
        • 嗯,简单浏览器缓存失效的标准解决方案。 Drupal 以这种方式处理 css 和 javascript 文件。而且它只在更新后加载一次图像 - 不像 time();上面的解决方案。如果您要处理大量图像,则应该有一个专用的图像缓存处理程序,它可以根据请求检查每个资产的缓存状态。
        • 是的,绝对同意这比仅将当前时间戳附加到每张图像要好。
        【解决方案4】:

        我所做的是将时间函数附加到图像 URL 的末尾,以便每次为每个用户动态地点击它。例如:

        echo '<img src="images/image.jpg?' . time() . '" alt="">';
        

        【讨论】:

        • 要为本地用户禁用它,请放置一个 IF 条件来检查 IP 网络范围的子字符串。使用 $_SERVER['REMOTE_ADDR'] 全局变量。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-14
        • 2019-07-11
        • 1970-01-01
        • 1970-01-01
        • 2018-10-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多