【问题标题】:How to show the last uploaded image when refresh page in PHP如何在PHP中刷新页面时显示最后上传的图像
【发布时间】:2019-08-31 04:53:18
【问题描述】:

我有一个应用程序,它使用 file_get_contents 和 file_put_contents 方法从动态图像源生成图像。创建图像后,图像将上传到我服务器上的目录。我面临的问题是每次生成图像并刷新页面时都会看到旧图像出现。当我清除缓存时,它会显示新图像。

我该如何解决这个问题?

<?php
$imagename = "img".$id.".png";
$host = $_SERVER['DOCUMENT_ROOT'];

$path     = $host.'/url/path/img/'.$imagename;
if(file_exists($path)) {
    //echo 'File already exists in that directory';
    unlink($path);
    $filehandler =  file_get_contents($imgurl);
    file_put_contents($path, $filehandler); 
}
else {
    $filehandler =  file_get_contents($imgurl);
    file_put_contents($path, $filehandler);
}

【问题讨论】:

  • “缓存破坏”是该问题的大多数解决方案都会收到的名称,以防您想查找更多信息。

标签: php


【解决方案1】:

最好将版本用作所有图像、js 和 css 文件的查询参数。使用时间戳不会那么好,因为如果图像未更新,它将不会从缓存中显示。所以为了避免额外的开销使用图像版本

也就是说, 最初

<img src="image.png?v1" />

直到现在发生下一次更新,这应该是 URL

一旦更新,它应该更改为

<img src="image.png?v2" />

【讨论】:

  • 这是一个有趣的解决方案。感谢分享!
【解决方案2】:

正如其他答案已经说明的那样,最简单的解决方案是在图像 URL 中添加一个参数。要在图像未更改时仍利用浏览器缓存,您不应使用随机值。

我的建议是使用图片文件的修改时间,例如

<img src="image.png?<?php filemtime('image.png'); ?>" />

这样做的好处是,您不需要跟踪版本来增加数字或类似内容。

【讨论】:

    【解决方案3】:

    这可以通过给图片src添加随机参数来解决,如图here。比如转这个:

    <img src="image.png" />
    

    进入这个:

    <img src="image.jpg?1222259157.415">
    

    在第二个src中,问号后面的数字是当前时间戳。这在 this 答案中得到了演示,它在 JavaScript 中设置时间戳并使用 Date.now() 将其附加到 src。

    【讨论】:

      猜你喜欢
      • 2019-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多