如何在php中重新上传具有相同文件名的图像时清除浏览器缓存?

16 php browser-cache

我有一个项目列表,其中还包含图像缩略图.有时我需要更改缩略图,但保持文件名相同.有没有办法强制浏览器下载新上传的图像,而不是从浏览器缓存中抓取一个?

当人们更新他们的头像时,这是非常相关的,这会导致一些用户感到困惑,他们一直看到他们的旧头像,直到他们清除浏览器缓存或重新启动浏览器.

nia*_*llo 26

在图像src的末尾附加一个唯一的数字

<?php

echo "<img src=../thumbnail.jpg?" . time() . ">";
Run Code Online (Sandbox Code Playgroud)

只在更新头像的表单上执行此操作

适合我

顺便说一句,这适用于强制更新其他静态文件

即用于css文件的html是

<link rel="Stylesheet" href="../css/cssfile.css?<?= md5_file('cssfile.css'); ?>" /> 
Run Code Online (Sandbox Code Playgroud)

  • 请注意,计算 md5 需要大量的处理能力。最好使用`filemtime()`。 (2认同)

Leo*_*Leo 6

您可以使用文件的修改时间:

<?

$filename = 'avatar.jpg';
$filemtime = filemtime($filename);

echo "<img src='".$filename."?".$filemtime."'>";

//result: <img src='avatar.jpg?1269538749'>

?>
Run Code Online (Sandbox Code Playgroud)

修改文件时将清除客户端缓存

  • 这太棒了,应该想到这个 +1 (2认同)

Tom*_*nFL 2

您可以通过更改标头来使整个页面的缓存失效:

<?php
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
?>
Run Code Online (Sandbox Code Playgroud)

  • 然后只有上传后才执行吗? (4认同)
  • 不幸的是,这将导致无法缓存文件,从而增加页面加载时间和带宽成本。 (2认同)