5

CURL でストリームを開く前にファイルが変更されたかどうかをどのように理解できますか (その後、file-get-contents で開くことができます)

ありがとう

4

2 に答える 2

4

次を確認しCURLINFO_FILETIMEます。

$ch = curl_init('http://www.mysite.com/index.php');
curl_setopt($ch, CURLOPT_FILETIME, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
$exec = curl_exec($ch);

$fileTime = curl_getinfo($ch, CURLINFO_FILETIME);
if ($fileTime > -1) {
    echo date("Y-m-d H:i", $fileTime);
} 
于 2012-09-28T08:40:17.683 に答える
1

最初に HEAD リクエストを送信してlast-modified、キャッシュされたバージョンと比較するためのターゲット URL のヘッダーを取得してみてください。またIf-Modified-Since、キャッシュされたバージョンが GET 要求で作成されるときにヘッダーを使用して、相手側も応答できるようにすること302 Not Modifiedもできます。

curl で HEAD リクエストを送信すると、次のようになります。

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_NOBODY, true);
curl_setopt($curl, CURLOPT_HEADER, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTP_VERSION , CURL_HTTP_VERSION_1_1);
$content = curl_exec($curl);
curl_close($curl)

これ$contentで、返された HTTP ヘッダーが 1 つの長い文字列として含まれるlast-modified:ようになり、次のように検索できます。

if (preg_match('/last-modified:\s?(?<date>.+)\n/i', $content, $m)) {
    // the last-modified header is found
    if (filemtime('your-cached-version') >= strtotime($m['date'])) {
        // your cached version is newer or same age than the remote content, no re-fetch required
    }
}

ヘッダーも同じように処理する必要がありexpiresます(ヘッダー文字列から値を抽出し、値が将来のものかどうかを確認します)

于 2012-09-28T08:41:44.017 に答える