この件に関する知識が不足していることを事前にお詫び申し上げます。私は他の多くの投稿を見てきましたが、それらの解決策のどれも私のために働くことができません。
とにかく、私は動的なdisplayimage.phpファイルを使用して、作業中のサイトでユーザーのプロフィール写真を表示しています。このページはidパラメータを取り、mysqlデータベースから画像ファイル名を取得します。(省略形の)コードは次のとおりです。
$id = mysql_real_escape_string($_GET[id]);
$table = "images_user";
$idname = "userid";
$uploaddir = "/home/username/uploads/images/user/"; //outside web root
$select = mysql_query("SELECT * FROM $table WHERE $idname = '$id' LIMIT 1");
if(mysql_num_rows($select) > 0) {
$file = mysql_fetch_assoc($select);
header("Content-Type: $file[mimetype]");
readfile($uploaddir.$file[name]);
}
現在、phpファイルから生成されているため、画像はキャッシュされていません。これにより、サイトの速度が大幅に低下します。だから私はこれを追加します:
header("Cache-Control: private, max-age=10800, pre-check=10800");
header("Pragma: private");
header("Expires: " . date(DATE_RFC822,strtotime(" 2 day")));
これで問題は解決します。これで画像がキャッシュされ、非常に高速に読み込まれます。
ただし、ユーザーはプロフィール写真を変更することができます。これが発生した場合、アップロードした画像を保存し、古い画像を削除して、新しい画像を指すようにデータベースエントリを更新します。しかし今では、古い画像がまだキャッシュされているため、手動でページをF5しない限り、更新は表示されません。
画像をキャッシュするようにするにはどうすればよいですか?ただし、画像が変更されたときに「再キャッシュ」を強制しますか?