Получить последнюю измененную дату удаленного файла

Я хотел бы получить последнюю измененную дату удаленного файла с помощью curl. Кто-нибудь знает как это сделать?

Related of "Получить последнюю измененную дату удаленного файла"

Из статьи php :

<?php // outputs eg somefile.txt was last modified: December 29 2002 22:16:23. $filename = 'somefile.txt'; if (file_exists($filename)) { echo "$filename was last modified: " . date ("F d YH:i:s.", filemtime($filename)); } ?> 

filemtime () – это ключ здесь. Но я не уверен, что вы можете получить последнюю измененную дату удаленного файла, так как сервер должен отправить его вам … Может быть, в заголовках HTTP?

Вероятно, вы могли бы сделать что-то подобное с помощью curl_getinfo() :

 <?php $curl = curl_init('http://www.example.com/filename.txt'); //don't fetch the actual page, you only want headers curl_setopt($curl, CURLOPT_NOBODY, true); //stop it from outputting stuff to stdout curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // attempt to retrieve the modification date curl_setopt($curl, CURLOPT_FILETIME, true); $result = curl_exec($curl); if ($result === false) { die (curl_error($curl)); } $timestamp = curl_getinfo($curl, CURLINFO_FILETIME); if ($timestamp != -1) { //otherwise unknown echo date("Ymd H:i:s", $timestamp); //etc } 

В PHP вы можете использовать собственную функцию get_headers() :

 <?php $h = get_headers($url, 1); $dt = NULL; if (!($h || strstr($h[0], '200') === FALSE)) { $dt = new \DateTime($h['Last-Modified']);//php 5.3 } 

Вы можете активировать прием заголовков ответа с помощью curl_setopt($handle, CURLOPT_HEADER, true) . Вы также можете включить CURLOPT_NOBODY, чтобы получать только заголовки, а после этого взорвать результат с помощью \ r \ n и интерпретировать одиночные заголовки. Заголовок Last-Modified – это тот, который вас интересует.

Иногда заголовок поставляется с другим верхним строчным регистром, это должно помочь:

 function remoteFileData($f) { $h = get_headers($f, 1); if (stristr($h[0], '200')) { foreach($h as $k=>$v) { if(strtolower(trim($k))=="last-modified") return $v; } } } 

Изменив ответ h4kuna, я создал это:

 $fileURL='http://www.yahoo.com'; $headers = get_headers($fileURL, 1); $date = "Error"; //echo "<pre>"; print_r($headers); echo "</pre>"; if ( $headers && (strpos($headers[0],'200') !== FALSE) ) { $time=strtotime($headers['Last-Modified']); $date=date("dmY H:i:s", $time); } echo 'file: <a href="'.$fileURL.'" target="_blank">'.$fileURL.'</a> (Last-Modified: '.$date.')<br>'; 

будет что-то вроде этой работы, с форума веб-разработчиков

 <? $last_modified = filemtime("content.php"); print("Last Updated - "); print(date("m/d/y", $last_modified)); ? // OR $last_modified = filemtime(__FILE__); 

ссылка дает некоторую полезную информацию, вы можете использовать их

Должен был решить подобную проблему, но для меня загрузка раз в день была достаточной, поэтому я сравнивал только день изменения локального (загруженного) кэш-файла. У удаленного файла не было заголовка Last-Modified.

 $xml = 'test.xml'; if (is_file($xml) || date('d', filemtime($xml)) != date('d')) { $xml = file_get_contents(REMOTE_URL); }