Php 检查远程文件是否已更改

Php 检查远程文件是否已更改,php,file,curl,timestamp,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_

我使用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);

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

您的方法很适合查找上次修改的时间值。(需要注意CURLINFO_FILETIME的-1返回,这意味着没有识别出上次修改的头值。)

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


另一个选项是保存ETag和上次修改的头,然后使用条件请求再次获取图像。这将更加复杂,但每次都要保存额外的HEAD请求。您可以在这个SO问题中看到一些详细信息:。

如果您有ftp访问权限,您可以了解实际的文件修改时间。为什么要遵循重定向?比较文件大小也有助于了解更改。我遵循重定向,因为我希望最终会有一个图像文件,用户可能会提供一个缩短的链接。OTOH,
ETAG
可能会提供,但并不总是这样。当然我也会检查文件大小。谢谢你指出-1表示没有设置头!