【问题标题】:PHP force refresh imagePHP强制刷新图片
【发布时间】:2013-05-13 16:00:42
【问题描述】:

我正在创建一个允许用户上传图片的输入表单。提交后,用户将返回到顶部带有构造位的表单。

然后通过查询存储图像 URL 的 MySQL 数据库预览任何已提交的图像。但是,如果用户上传了一张照片,它会被预览,然后他们决定更改该照片并重新提交表单,当它带您返回表单时,除非您手动按下浏览器上的刷新,否则新照片不会显示。

是否有任何方法强制刷新/缓存删除或刷新该特定图像而不是整个页面?

谢谢

【问题讨论】:

    标签: php


    【解决方案1】:

    将修改后的日期作为查询添加到图片的末尾。

    <img src="/images/photo.png?=1239293"/>
    

    在 PHP 中

    <img src="/images/photo.png?=<?php echo filemtime($filename)?>"/>
    

    【讨论】:

    • 你会推荐什么函数来生成时间戳?
    • 当我欺骗浏览器重新加载时,我刚刚添加了没有任何时间戳的问号。
    • 如果图像存储在硬盘上,那么您可以使用filemtime的整数结果。即使您覆盖旧的图像文件,它也可以工作。 php.net/manual/en/function.filemtime.php
    • 需要注意的一点是,在没有在服务器级别配置缓存标头的情况下,? 的存在可能会改变浏览器的默认假设,即“缓存一段时间,因为它是一个图像”到“从不缓存,因为它有一个查询字符串”。在这种情况下这很好,但并不总是符合预期。
    【解决方案2】:

    在 PHP 中你可以发送一个随机数或当前时间戳:

    <img src="image.jpg?<?=Date('U')?>">
    

    <img src="image.jpg?<?=rand(1,32000)?>">
    

    【讨论】:

    • 这曾经在我的脚本中工作,现在不再工作。叹息
    • 没有理由不工作,除非你在代理缓存中忽略url参数。
    【解决方案3】:

    这里的技巧是告诉浏览器不要缓存内容。您可以通过将这些语句放在其他任何东西之前来做到这一点(没有空格或任何东西!)

    <?php
    header("Expires: Mon, 26 Jul 1997 05: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");
    ?>
    

    根据您加载图像的方式,您还可以使用 jQuery 对图像进行 javascript 刷新。

    【讨论】:

    • -1,不要禁用图像标题中的缓存。这将强制为每个页面加载下载图像。
    • 这将使浏览器不缓存页面上的内容。性能会下降,但不是很明显;但是,如果页面上有很多图像,它可能会显着降低它。
    • @MathewFoscarini 他希望在每次页面加载时下载图像。
    • 如果你只是想用javascript来刷新图片,你可以这样:stackoverflow.com/questions/2104949/…
    • @ChristianStewart,不,他希望在图像更改时下载图像。
    【解决方案4】:

    这对我很有用:

    image.jpg?=<?php echo rand() . "\n";?>
    

    【讨论】:

    • 感谢您的回答,虽然我大约在 4 年前解决了它:P
    【解决方案5】:

    您可以使用 JavaScript 将当前图像替换为新图像:

        <div id="imageHolder">this is where the image will show</div>
        <script type="text/javascript">
        function myfunction(){
        document.getElementById("imageHolder").innerHTML="<div id=\"imageHolder\"><img src='imagefolder/imagename.jpg' alt=''/></div>";
        }</script>
    

    当然需要在上传完成后触发函数myfunction ...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-13
      • 2010-12-28
      • 2011-01-13
      • 2012-01-24
      相关资源
      最近更新 更多