如何在使用CURL打开流之前了解文件是否已被修改 (然后我可以用file-get-contents打开它)
感谢
答案 0 :(得分:3)
检查CURLINFO_FILETIME
:
$ch = curl_init('http://www.mysite.com/index.php');
curl_setopt($ch, CURLOPT_FILETIME, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
$exec = curl_exec($ch);
$fileTime = curl_getinfo($ch, CURLINFO_FILETIME);
if ($fileTime > -1) {
echo date("Y-m-d H:i", $fileTime);
}
答案 1 :(得分:1)
首先尝试发送HEAD请求以获取目标网址的last-modified
标头,以便比较缓存版本。此外,您可以尝试使用If-Modified-Since
标头,以及使用GET请求创建缓存版本的时间,以便另一方也可以使用302 Not Modified
回复您。
使用curl发送HEAD请求看起来像这样:
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_NOBODY, true);
curl_setopt($curl, CURLOPT_HEADER, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTP_VERSION , CURL_HTTP_VERSION_1_1);
$content = curl_exec($curl);
curl_close($curl)
$content
现在将包含返回的HTTP标头,作为一个长字符串,您可以在其中查找last-modified:
:
if (preg_match('/last-modified:\s?(?<date>.+)\n/i', $content, $m)) {
// the last-modified header is found
if (filemtime('your-cached-version') >= strtotime($m['date'])) {
// your cached version is newer or same age than the remote content, no re-fetch required
}
}
您应该以相同的方式处理expires
标题(从标题字符串中提取值,检查该值是否在将来)