Php文件存在返回相同的图像

时间:2017-04-25 14:04:47

标签: php caching file-exists

这就是我正在做的事情,检查文件是否存在并在页面中回显,但页面显示旧图像,即使它已经被另一个图像替换它只显示旧图像,但是新图像在那里和旧图像被具有相同名称的新图像取代。

<?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;">'; 
}


?>

它看起来像是一个缓存问题。

3 个答案:

答案 0 :(得分: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");

答案 1 :(得分:0)

确保您确实已经替换了图片。并且图片也不会更改,直到您刷新页面。 PHP不是动态语言(结果(新图片)在您更改的时刻不会出现。) 替换图像时,请执行此操作以刷新页面:

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

答案 2 :(得分:-1)

它的缓存。尝试在Google Chrome上点击CTRL + F5,或者只需进入设置并删除缓存文件。

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