Время последней модификации PHP удаленного файла - PullRequest
7 голосов
/ 08 октября 2011

Я хочу получить время последней модификации удаленного файла.Я использую этот код, который я нашел здесь в stackoverflow

$curl = curl_init();

    curl_setopt($curl, CURLOPT_URL,$url);
    //don't fetch the actual page, you only want headers
    curl_setopt($curl, CURLOPT_NOBODY, true);
    curl_setopt($curl, CURLOPT_HEADER, 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);
    echo $result;
    $info = curl_getinfo($curl);
    print_r($info);
    if ($info['filetime'] != -1) { //otherwise unknown
        echo date("Y-m-d H:i:s", $info['filetime']); //etc
    }  

Проблема с этим кодом, я получаю filetime = -1 все время.Но когда я удаляю

curl_setopt($curl, CURLOPT_NOBODY, true);

, я получаю правильное время модификации.

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

curl_setopt($curl, CURLOPT_NOBODY, true);

.Мне просто нужен заголовок страницы, а не тело.

Заранее спасибо

Ответы [ 3 ]

4 голосов
/ 10 октября 2011

Учитывая дополнительную информацию в нашем обсуждении вопросов и ответов, похоже, что вы просто не получили ответ.Может случиться так, что на сервере настроен какой-то тип, который по какой-то причине намеренно или непреднамеренно блокирует запросы HEAD, или может быть задействован сложный прокси-сервер.

Когда я отлаживаю PHP cURL, я часто нахожу полезным использовать * nix box (мой mac или ssh к серверу) и запускать запросы из командной строки, чтобы я мог видетьрезультат, не беспокоясь о том, что PHP работает правильно, пока я не получу работу cURL.Например:

$ curl --head stackoverflow.com

HTTP/1.1 200 OK
Cache-Control: public, max-age=49
Content-Length: 190214
Content-Type: text/html; charset=utf-8
Expires: Mon, 10 Oct 2011 07:22:07 GMT
Last-Modified: Mon, 10 Oct 2011 07:21:07 GMT
Vary: *
Date: Mon, 10 Oct 2011 07:21:17 GMT
1 голос
/ 17 сентября 2013

На основании этого решения
PHP: Размер удаленного файла без загрузки файла

function retrieve_remote_file_time($url){




    $ch = curl_init($url);

     curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
     curl_setopt($ch, CURLOPT_HEADER, TRUE);
     curl_setopt($ch, CURLOPT_NOBODY, TRUE);
     curl_setopt($ch, CURLOPT_FILETIME, TRUE);

     $data = curl_exec($ch);
     $filetime = curl_getinfo($ch, CURLINFO_FILETIME);

     curl_close($ch);
     return $filetime;
}
0 голосов
/ 11 мая 2012

Я собираюсь взять пунт и сказать, что сервер, к которому вы подключаетесь, может быть веб-сервером IIS.

В моем случае я обнаружил, что сервер IIS 7 яподключение к НЕ возвращает дату последнего изменения, когда я выдаю запрос HEAD через Curl с использованием PHP (но он возвращает последнее изменение при выполнении обычного запроса GET).

Если вы контролируетек серверу, к которому вы подключаетесь, посмотрите, сможете ли вы заставить веб-сервер правильно выставить дату последнего изменения.В противном случае не используйте CURLOPT_NOBODY.

...