次のコードは、image.php (htaccess の下の image.jpeg も) で使用しているものです。ソースが変更されていない場合 (つまり、同じイメージである場合) に、キャッシュされたコピーにユーザーがアクセスできるようにしたいと考えています。ただし、ソースが変更されている場合は、新しいコピーを取得してください。この画像は背景画像であるため、キャッシュが重要です。このコードは正しいですか? Chrome で試してみたところ、ページを更新すると常に画像がリロードされました。再度ページに移動する (Enter をクリックする) と、キャッシュされた画像が更新された場合でも常に保持されていました。
<?php
session_start();
header("Cache-Control: private, max-age=10800, pre-check=10800");
header("Pragma: private");
header("Expires: " . date(DATE_RFC822,strtotime(" 2 day")));
if(file_exists('settings.xml')){
$xml = simplexml_load_file('settings.xml');
define("BACKGROUND_IMAGE", $xml->background->image);
define("BACKGROUND_TIME", $xml->background->time); // when image changes this is set to time()
}
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])
&&
(strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) == BACKGROUND_TIME)) {
// send the last mod time of the file back
header('Last-Modified: '.gmdate('D, d M Y H:i:s', BACKGROUND_TIME).' GMT',
true, 304);
exit;
}
// open the file in a binary mode
$name = BACKGROUND_IMAGE;
$fp = fopen($name, 'rb');
// send the right headers
header("Content-Type: image/png");
header("Content-Length: " . filesize($name));
// dump the picture and stop the script
fpassthru($fp);
exit;