Получить дату последнего изменения удаленного файла - PullRequest
32 голосов
/ 10 мая 2009

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

Ответы [ 8 ]

40 голосов
/ 10 мая 2009

Возможно, вы могли бы сделать что-то подобное, используя 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
} 
22 голосов
/ 12 октября 2012

В 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
}
13 голосов
/ 10 мая 2009

От статья php :

<?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 () является ключом здесь. Но я не уверен, что вы можете получить дату последнего изменения удаленного файла, поскольку сервер должен отправить его вам ... Может быть, в заголовках HTTP?

4 голосов
/ 22 ноября 2012

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

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;
        }
    }
}
3 голосов
/ 10 мая 2009

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

1 голос
/ 22 марта 2014

Отредактировав ответ h4kuna, я создал это:

<code>$fileURL='http://www.yahoo.com';
$headers = get_headers($fileURL, 1);
$date = "Error";
//echo "<pre>"; print_r($headers); echo "
"; if ($ headers && (strpos ($ headers [0], '200')! == FALSE)) { $ = Время StrToTime ($ заголовки [ 'Last-Modified']); $ date = date ("d-m-Y H: i: s", $ время); } echo 'file: '. $ fileURL. ' (Последнее изменение:'. $ date. ')
';
0 голосов
/ 28 января 2016

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

$xml = 'test.xml';
if (is_file($xml) || date('d', filemtime($xml)) != date('d')) {
    $xml = file_get_contents(REMOTE_URL);
}
0 голосов
/ 10 мая 2009

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

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

// OR

$last_modified = filemtime(__FILE__); 

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...