【问题标题】:Php file exists return same imagephp文件存在返回相同的图像
【发布时间】:2017-04-25 14:04:47
【问题描述】:

这就是我正在做的检查文件是否存在并在页面中回显,但是页面显示旧图像即使它已经被另一张图像替换它只是显示旧图像,但是新图像在那里并且旧图像已被同名的新图像替换。

<?php 

$dir = 'up/images/'.$_SESSION ['username'].'.png';

if (file_exists($dir)) {
    //echo "ok";
  echo '<img  src="up/images/'.$_SESSION['username'].'.png" class="img-responsive img-thumbnail" width="200px;" height="200px;">'; 

} else {
   //not found 

  echo '<img  src="img/user-icon-yellow.png" class="img-responsive img-thumbnail" width="200px;" height="200px;">'; 
}


?>

看起来像是缓存问题之类的。

【问题讨论】:

  • 用 PHP 设置缓存头。 stackoverflow.com/questions/13640109/…
  • 您能否重新表述您的问题,您的问题根本不清楚。
  • 为了快速测试,您可以通过在图像的“查询字符串”中添加随机字符串来欺骗浏览器/ISP 缓存... imagename.php?SomethingRandomHere

标签: php caching file-exists


【解决方案1】:

缓存半身像的好方法是将版本字符串添加到图像路径中。例如:

$image = basename($_SESSION['username']) . ".png";
$image = realpath("/path/to/$image");
echo '<img src="up/images/'.$_SESSION['username'].'.png?v='.filemtime($image).'" [...]>';

这是假设您的 HTML 页面没有被缓存,如果它们被缓存,那么您需要发送额外的标头来破坏缓存。这取决于环境,但对于 Apache 之类的东西,您可以执行以下操作:

 Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
 Header set Pragma "no-cache"
 Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"

或者,您也可以使用 PHP 的 header() 函数来设置标题:

 header("Cache-Control: max-age=0, no-cache, no-store, must-revalidate");
 header("Pragma: no-cache");
 header("Expires: Wed, 11 Jan 1984 05:00:00 GMT");

【讨论】:

  • 你能在php中给出这个头文件的实现吗?是否应该添加为字符串?请在头函数中给出一个实现
  • 部分工作,但是当用户上传图片时,是通过ajax和外部形式发送的文件完成的,所以上传后页面不会自动重新加载,所以需要按 f5 显示新图像,如何自动执行此操作?我做了标题位置,但没有用。
  • 在AJAX上传完成后使用JS重新加载图片,同时在URL尾部附加一个随机字符串作为查询字符串。例如(在 jquery 中为方便起见):var $image = $("selector to img"); $image.prop("src", $image.prop("src") + "?" + Math.rand()) -- 当然更新选择器。
  • 我在保存按钮onClick="window.location.reload()" 中添加了这个,但没用
  • 我发现它为什么不起作用,因为onClick="window.location.reload()" 在图像仍在上传的时间运行,因此它需要在 1 秒后运行刷新,例如
【解决方案2】:

确保你真的替换了图片。而且在你刷新页面之前图片不会改变。 PHP不是动态语言 strong>(结果(新图像)不会在您更改它的那一刻出现)。
当您替换图像时,请执行以下操作以刷新页面:

header("Refresh:0"); //Refreshes the page after 0 second (immediately)

您也可以尝试使用:

header('Location: '. $_SERVER['PHP_SELF']); //It will redirect the page to the same page and probably clear the cache

【讨论】:

  • 是的,图像真的被替换了header("Refresh:0");刷新时同样的问题
  • 是的,那确实是缓存问题,我猜是因为文件名相同,它只是加载旧图像,顺便说一下,而不是使用header('Location: '. $_SERVER['PHP_SELF']);,我认为它会清除缓存并“刷新”页面。
【解决方案3】:

这是缓存。尝试在 Google Chrome 上按 CTRL + F5 或直接进入设置并删除缓存文件。

您始终可以安装 Google Chrome 扩展程序,该扩展程序可以在每次刷新时删除特定网站的缓存文件。

【讨论】:

    猜你喜欢
    • 2013-12-23
    • 1970-01-01
    • 2013-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多