检查远程文件是否已更改

时间:2011-09-26 22:29:09

标签: php file curl timestamp

我正在使用PHP cURL模块通过HTTP标头提取远程文件的时间戳。我已经设法通过使用CURLOPT_FILETIME常量来获取修改时间戳。当然,我这样做也是为了看看远程文件是否已经改变而没有下载它的内容。

$ch = curl_init($url);  /* create URL handler */
curl_setopt($ch, CURLOPT_NOBODY, TRUE); /* don't retrieve body contents */
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); /* follow redirects */
curl_setopt($ch, CURLOPT_HEADER, FALSE); /* retrieve last modification time */
curl_setopt($ch, CURLOPT_FILETIME, TRUE); /* get timestamp */
$res = curl_exec($ch);
$timestamp = curl_getinfo($ch, CURLINFO_FILETIME);
curl_close($ch);

在您看来,检查远程文件是否已更改的最佳方法是什么?我应该只使用时间戳检查吗?还是有一些其他聪明的选择没有出现在我脑海中?!

1 个答案:

答案 0 :(得分:3)

您的方法看起来很适合查找Last-Modified时间值。 (需要注意CURLINFO_FILETIME的-1返回,这意味着没有识别出Last-Modified标头值。)

您可以保存返回的时间,并在将来的检查中查看它是否已更改。如果它已更改,请通过Curl获取新文件。

另一种选择是保存ETag和Last-Modified标头,然后使用条件请求再次获取图像。这会更复杂,但每次都要保存额外的HEAD请求。您可以在此SO问题中查看一些详细信息:if-modified-since vs if-none-match