web-dev-qa-db-ja.com

リモートファイルの最終更新日を取得する

Curlを使用してリモートファイルの最終変更日を取得したいと思います。誰かがそれを行う方法を知っていますか?

32
Mark Henry

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ヘッダーにありますか?

13

あなたはおそらく 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
} 
41
Tom Haigh

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
}
22
h4kuna

ヘッダーに異なる大文字と小文字が付いている場合があります。これは役立つはずです。

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;
        }
    }
}
4
Pons

curl_setopt($handle, CURLOPT_HEADER, true)を使用して、応答のヘッダーの受信をアクティブ化できます。 CURLOPT_NOBODYをオンにしてヘッダーのみを受信し、その後、\ r\nによって結果を分解して、単一のヘッダーを解釈することもできます。ヘッダーLast-Modifiedはあなたが興味を持っているものです。

3

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>';
1
trante

同様の問題を解決する必要がありましたが、私にとっては1日1回のダウンロードで十分だったので、ローカル(ダウンロードされた)キャッシュファイルの変更日のみを比較しました。リモートファイルにLast-Modifiedヘッダーがありませんでした。

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

ウェブ開発者フォーラム からのこの作品のようなものでしょうか?

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

// OR

$last_modified = filemtime(__FILE__); 

リンクはあなたがそれらを使用することができるいくつかの有用なインサイトを提供します

0
dassouki