CURL でストリームを開く前にファイルが変更されたかどうかをどのように理解できますか (その後、file-get-contents で開くことができます)
ありがとう
CURL でストリームを開く前にファイルが変更されたかどうかをどのように理解できますか (その後、file-get-contents で開くことができます)
ありがとう
次を確認し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);
}
最初に 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
ます(ヘッダー文字列から値を抽出し、値が将来のものかどうかを確認します)