我提前道歉,因为我对这个问题缺乏了解;我看了很多其他帖子,但无法让他们的任何解决方案为我工作。
无论如何,我正在使用动态 displayimage.php 文件在我正在处理的网站上显示用户的个人资料图片。该页面采用id参数,并从mysql数据库中提取图像文件名。这是(缩写)代码:
$id = mysql_real_escape_string($_GET[id]);
$table = "images_user";
$idname = "userid";
$uploaddir = "/home/username/uploads/images/user/"; //outside web root
$select = mysql_query("SELECT * FROM $table WHERE $idname = '$id' LIMIT 1");
if(mysql_num_rows($select) > 0) {
$file = mysql_fetch_assoc($select);
header("Content-Type: $file[mimetype]");
readfile($uploaddir.$file[name]);
}
目前,因为它是从php文件生成的,所以图像没有被缓存,这真的会减慢网站的速度。所以我补充一点:
header("Cache-Control: private, max-age=10800, pre-check=10800");
header("Pragma: private");
header("Expires: " . date(DATE_RFC822,strtotime(" 2 day")));
哪个解决了这个问题,太棒了!现在,图像被缓存,加载速度超快。
但是,用户可以更改其个人资料照片。发生这种情况时,我保存上传的图片,删除旧图片,并更新数据库条目以指向新图片。但是现在,因为旧图片仍然被缓存,除非他们手动F5页面,否则他们看不到更新。
如何让它缓存图片,但在图片更改后强制“重新缓存”?
答案 0 :(得分:4)
更新图片后,在您访问的网址中添加一个额外的参数来显示图片,这里是`displayimage.php'。 最常见的是时间戳。
与正常情况一样,您可以访问displayimage.php?id=123123
在更新个人资料照片后,要刷新图像,您需要访问
displayimage.php?id=123123&time=1000121110
。
每次用户更新图像时,更改时间参数都会强制从页面重新加载图像。
答案 1 :(得分:1)
目前,您对脚本的网址类似于:
displayimage.php?id=X
您需要做的是为每个用户添加一个版本号,每次用户更新其个人资料图片时,该版本号都会增加:
displayimage.php?id=X&v=Y
版本号也可以存储在数据库中。
版本号也可能是上传图像文件的最后修改时间,这避免了使用另一个表字段并递增代码:
displayimage.php?id=X&v=TIME