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

Php文件存在并返回相同的图像,php,caching,file-exists,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" c

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

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


?>


看起来像是缓存问题或其他什么。

这是缓存问题。在Google Chrome上点击CTRL+F5,或者直接进入设置并删除缓存文件


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

缓存bust的一个好方法是在图像路径中添加版本字符串。例如:

$image = basename($_SESSION['username']) . ".png";
$image = realpath("/path/to/$image");
echo '<img src="up/images/'.$_SESSION['username'].'.png?v='.filemtime($image).'" [...]>';
或者,您也可以使用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不是一种动态语言(结果(新图像)不会在更改时显示)。
替换图像时,请执行以下操作以刷新页面:

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

使用PHP设置缓存头。你能重新表述一下你的问题吗?你的问题根本不清楚。为了快速测试,你可以在图像的“查询字符串”中添加一个随机字符串来欺骗浏览器/ISP缓存。。。php?SomethingRandomHereYes图像确实被替换
标题(“刷新:0”)刷新时出现同样的问题是的,那么这确实是一个缓存问题,我想这是因为文件名相同,它只是加载了旧图像,顺便说一下,而不是使用
头('Location:'。$\u SERVER['PHP_SELF'),我想它会清除缓存并“刷新”页面。你能给出这个标题在php中的实现吗?是否应添加为字符串?请在header Function中给出一个实现它部分工作,但是当用户上传图像时,它是通过ajax和以外部形式发送的文件完成的,因此上传后页面不会自动重新加载,因此需要按f5来显示新图像,如何自动执行此操作?我对标题位置做了修改,但不起作用。在AJAX上传完成后,使用JS重新加载图像,同时在URL尾部添加一个随机字符串作为查询字符串。例如(为了方便起见,在jquery中):
var$image=$(“img选择器”)$image.prop(“src”),$image.prop(“src”)+“?”+Math.rand())
——当然,更新选择器。我在保存按钮
onClick=“window.location.reload()”
中添加了这个选项,但没有发现为什么它不工作,因为
onClick=“window.location.reload()”
在图像仍在上载时运行,因此它需要在1秒后运行刷新
header('Location: '. $_SERVER['PHP_SELF']); //It will redirect the page to the same page and probably clear the cache