如何缓存通过PHP提供的图像?

时间:2012-09-03 17:29:09

标签: php caching header

我正在将我的网站的背景图像设置为服务器上的URL,这是一个php脚本,它将图像作为输出。这是代码:

   //$mime is usually image/jpeg, etc
   header("Content-type: $mime");
   $image = readfile($image);
   imagejpeg($image);

问题是,每次加载页面时,图像似乎都会被加载而不是被缓存。有什么我可以做的,例如发送一个标题来缓存图像吗?

3 个答案:

答案 0 :(得分:4)

我总是使用ETag(一个md5哈希)和Last-Modified(过去的日期,通常是在创建文件时)获得最佳结果。

代码就是这样:

$etag = md5_file($image);
$lastModified = gmdate('D, d M Y H:i:s', filemtime($image)) . ' GMT';


header("Content-type: $mime");
header("ETag: \"{$etag}\"");
header("Last-Modified: $lastModified");
header('Expires: ' . gmdate("D, d M Y H:i:s", ((60*60*24*45)+strtotime($lastModified)))); // add 45 days expire

$image = readfile($image);
imagejpeg($image);

答案 1 :(得分:1)

使用上次修改的标题字段并始终将其设置为过去的日期。

这样浏览器就会收到服务器的“未修改”回复,并会使用图片的缓存版本。

答案 2 :(得分:1)

我建议添加一个标题来告诉上次修改图像文件的日期:

 header("Last-Modified: " . gmdate("D, d M Y H:i:s", filemtime($image)) . " GMT");
 header("Content-type: $mime");
 $image = readfile($image);
 imagejpeg($image);

这样浏览器就可以缓存图像了。