首先你必须分析在头信息中给出的日期:
$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));
,那么你可以检查此与实际时间,只有执行更新,如果达到从上次更新$日期
$now = new DateTime();
if($now > $date);
您下载的XML解析和日期后,你应该保存在一个文件或数据库的$日期。 下一次执行脚本时,只需根据新的DateTime()检查保存的日期以查看是否已经更新它,如果不是,则可以从文件加载保存的XML。
将XML保存为文件很好,可以将它保存到数据库,但我不会为保存一个XML结构而设置数据库。如果您想保留旧的XML历史记录,则数据库将再次有意义。
请注意,这将已经使用正确提供的时区。 – zuloo
好吧,但我怎么只抓住过期:星期一,2011年11月22日10时01分22秒,而不是所有的头? –
只是放在完整的标题,正则表达式应该只是符合过期的东西线... – zuloo