缓存php生成的图像,直到其发生更改


Cache php-generated image until it changes

我对我缺乏这方面的知识提前表示歉意;我已经看了很多其他的帖子,但无法找到任何适合我的解决方案。

无论如何,我正在使用一个动态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页面,否则他们看不到更新。

如何让它缓存图片,但在图片更改时强制"重新缓存"?

在他们更新图片后,在您访问的url中添加一个额外的参数来显示图像,这里是"displayimage.php"。最常见的情况是时间戳。

与正常情况一样,您可以访问displayimage.php?id=123123

更新个人资料图片后,要刷新图像,您需要访问CCD_ 2。每次用户更新图像时,更改的时间参数将强制从页面重新加载图像。

当前脚本的url看起来像:

displayimage.php?id=X

你需要做的是为每个用户添加一个版本号,每当用户更新他的个人资料图片时,这个版本号就会增加:

displayimage.php?id=X&v=Y

版本号也可以存储在数据库中。

版本号也可以是上传的图像文件上最后一次修改的时间,这样可以避免使用另一个表字段和递增代码:

displayimage.php?id=X&v=TIME