2009-05-10 2 views

ответ

14

От php's article:

<?php 
// outputs e.g. 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 Y H:i:s.", filemtime($filename)); 
} 
?> 

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

+2

Из инструкции: «Начиная с PHP 5.0.0, эта функция также может использоваться с * некоторыми * обертками URL». – nickf

+3

Для моего опыта этот метод не работает всегда (он зависит от вашего php.ini), поэтому родные get_headers работали лучше для меня. – Pons

+0

@ Понс, я согласен, он не работает со мной –

36

Вы могли бы сделать что-то вроде этого, используя 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("Y-m-d H:i:s", $timestamp); //etc 
} 
+1

Я заметил, что этот код иногда не работает, работает родной php get_headers лучше для меня. – Pons

0

бы что-то вроде этой работы, от web developer forum

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

// OR 

$last_modified = filemtime(__FILE__); 

ссылка предоставляет некоторые полезные INSITE на вы можете использовать их

3

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

+0

Yep - просто запросите заголовки –

+1

Предполагая, что они отправляют заголовок Last-Modified –

18

В 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 
} 
+5

Условие «If» не работает должным образом ... 'if (! $ H || strpos ($ h [0], '200')! == false) {'работает лучше для меня! – dino

+0

Дино правильно. Похоже, что оператор '!' Случайно был исключен в приведенном выше коде. Оператор if должен быть действительно 'if (! (! $ H || strstr ($ h [0], '200') === FALSE)) {' – Steven

+2

Можете объединить и добавить код нижнего регистра от Pons к этому также. 'Если (strtolower (дифферент ($ к)) == 'последнего изменения')' – Armstrongest

3

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

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; 
     } 
    } 
} 
1

К ответу РЕДАКТИРОВАНИЕ 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("d-m-Y H:i:s", $time); 
} 
echo 'file: <a href="'.$fileURL.'" target="_blank">'.$fileURL.'</a> (Last-Modified: '.$date.')<br>'; 
0

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

$xml = 'test.xml'; 
if (is_file($xml) || date('d', filemtime($xml)) != date('d')) { 
    $xml = file_get_contents(REMOTE_URL); 
} 
Смежные вопросы