繁体   English   中英

使用HTTP标头在PHP中进行缓存控制

[英]using HTTP headers for cache control in PHP

如何使用HTTP标头控制何时​​应更新缓存?

目前,我正在使用cURL来获取实时XML提要,然后将其保存到xml文件中。 提要还发送HTTP标头,通知您何时更新。 更新时间可能在30秒到3分钟之间。

标题看起来像这样

Expires: Mon, 22 Nov 2011 10:01:22 GMT

这是我目前每30秒检查一次的内容

if (file_exists($filename) && (filemtime($filename) > time() - 30)) {

我希望它仅根据HTTP标头中的内容进行更新。

我将如何去做?

还有没有比将其保存到XML文件更好的缓存此XML提要的方法了?

首先,您必须解析标题中给出的日期:

$header = "Expires: Mon, 22 Nov 2011 10:01:22 GMT";
preg_match(
    "/Expires: [A-Za-z]+, ([0-9]{1,2}) ([A-Za-z]+) ([0-9]{4}) ([0-9:]+) ([A-Z]{3})/", 
    $header,
    $matches
);
$months = array(
    "Jan" => "01",
    "Feb" => "02", 
    "Mar" => "03",
    "Apr" => "04",
    "May" => "05",
    "Jun" => "06",
    "Jul" => "07",
    "Aug" => "08",
    "Sep" => "09",
    "Oct" => "10",
    "Nov" => "11",
    "Dec" => "12"
);
$day = $matches[1];
$month = $months[$matches[2]];
$year = $matches[3];
$time = $matches[4];
$zone = $matches[5];

$date = new DateTime("$year-$month-$day $time", new DateTimeZone($zone));

那么您可以对照实际时间进行检查,并且仅在达到最后一次更新的$ date时才执行更新

$now = new DateTime();
if($now > $date);

下载XML并分析日期后,应将$ date保存在文件或数据库中。 下次执行脚本时,只需对照新的DateTime()检查保存的日期以查看是否已经更新,否则可以从文件中加载保存的XML。

将XML保存为文件很好,您可以将其保存到数据库中,但是我不会只为保存一个XML结构而设置数据库。 如果要保留旧XML的历史记录,则DB再次有意义。

Expires标头告诉您文档将过期的时间,即“直到此日期才检查”。 请注意,它指定了时区(GMT),因此这可能不是您的本地时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM