Webサイトを更新したのに「画像が変わらない」という現象に遭遇したことはありませんか?
これはブラウザのキャッシュが原因です。
本記事では、PHPを使って画像のキャッシュをクリア(無効化)する方法を解説します。
ブラウザは表示速度を上げるために、画像を一度ダウンロードすると保存(キャッシュ)します。
そのため、下記のような問題が発生します。
・画像を差し替えたのに反映されない
・古い画像が表示され続ける
画像URLの末尾に「バージョン情報」を付ける方法です。
<img src="image.jpg?v=1">
<img src="image.jpg?v=<?= time(); ?>">
<img src="image.jpg?v=<?= filemtime('image.jpg'); ?>">
time()filemtime()PHP側でブラウザに「キャッシュするな」と指示する方法です。
header('Cache-Control: no-cache, no-store, must-revalidate');
header('Pragma: no-cache');
header('Expires: 0');
<?php
header('Content-Type: image/jpeg');
header('Cache-Control: no-cache, no-store, must-revalidate');
readfile('image.jpg');
画像の名前自体を変える方法です。
image.jpg → image_v2.jpg
| 方法 | 特徴 |
|---|---|
| クエリパラメータ | 簡単・柔軟 |
| filemtime() | 更新時のみ反映 |
| HTTPヘッダー | 強制無効 |
| ファイル名変更 | 完全対策 |