【发布时间】:2012-12-28 09:10:41
【问题描述】:
我正在尝试缓存一个在一个站点上成功的 PHP 文件,但是当我在另一个站点上实现代码时它没有被缓存。我用 Firebug 进行了检查,我得到了一个200 OK 状态,这意味着每次页面刷新时它都会从服务器下载它。
这是我的代码:
$now = time();
$generatedAt = gmdate('D, d M Y H:i:s T', $now);
$lastModified = gmdate('D, d M Y 00:00:00 T', $now);
$expiresAt = gmdate('D, d M Y H:i:s T', strtotime($lastModified) + 8035200);
$maxAge = strtotime($expiresAt) - strtotime($generatedAt);
header('Last-modified: '.$lastModified);
header('Cache-control: max-age='.$maxAge);
额外信息:
它是从我的另一个站点复制的,我得到了304 NOT MODIFIED 状态,这意味着它确实被缓存了。
此代码位于文件顶部,没有回显或输出,这意味着尚未发送任何标头。
我的 .htaccess 文件也配置正确,我没有指定它不应该缓存 PHP 文件。
【问题讨论】:
-
您是否在脚本中使用了试图缓存的会话?
-
脚本中没有会话,我的整个网站也没有
-
好的。 PHP 喜欢在涉及会话时发送缓存清除标头。您能否检查并查看请求脚本看到的实际标头是什么?拥有它们会很有用,并且会让实际发生的事情变得非常明显。
-
在header(cache-control)下面还有一个header是:header(content-type)
-
您可以在 Linux 上使用
curl -I URL或在 Windows 客户端上使用 Firebug 来读取发送的标头。