![](/img/trans.png)
[英]Using cURL and HTTP headers to cache an XML feed correctly with 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.