使用 PHP 缓存生成的图像

Sam*_*nch 0 html php apache image-caching

我有一个脚本,它在服务器上使用 PHP 生成图像,格式为 image.png。然后我在不同的地方使用这个图像<img src="http://domain.com/images/image.png" />

我遇到的问题是,尽管图像每 30 分钟重新生成一次,但它似乎已被缓存,并且在我访问http://domain.com/images/image.png之前不会显示新值进而ctrl+shift+refresh

有什么方法可以保持图像名称相同,但使其始终显示图像的最新版本?

Shi*_*dim 5

发生这种情况是因为浏览器缓存了超过 30 分钟。由于您的图像每 30 分钟生成一次,因此您应该相应地设置ExpiresCache-control标题。

请参阅这些标题。

Expires: Mon, 10 Dec 2012 16:25:18 GMT
Cache-Control: max-age=1800
Run Code Online (Sandbox Code Playgroud)

这里Expries设置的时间是从现在起 30 分钟 ( Date: Mon, 10 Dec 2012 15:55:18 GMT)。并且Cache-Control还需要设置。该单位在这里排名第二。

我将这些标头用于缓存持续时间为 60 分钟的图像生成站点。这些是我缓存它时遵循的规则。

  1. 检查图片文件是否存在
    • 如果它早于我的缓存持续时间,请将其删除,然后生成新图像。
  2. 如果图像文件不存在
    • 生成图像并保存
  3. 现在我们有了一个有效的图像。
  4. 计算图像的文件修改日期并添加缓存持续时间。
  5. 使用正确的标头提供服务,其中到期日期将是我们在步骤 4 中计算的值。