1

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

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

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

4

3 回答 3

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);
于 2012-09-03T17:32:12.797 回答
1

使用 last-modified 标题字段并将其始终设置为过去的日期。

这样,浏览器将从您的服务器收到“未修改”回复,并将使用图像的缓存版本。

于 2012-09-03T17:34:25.920 回答
1

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

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

这样浏览器将能够缓存图像。

于 2012-09-03T17:34:33.627 回答