PHP使用でファイルを修正するたびに日付追加でキャッシュ無効化

PHPでキャッシュのクエリーを生成

CSSやJavaScriptではキャッシュを防止するためにファイルのURLの語尾に?20200123のような日付を付けることがある。

<link rel="stylesheet" href="https://iwb.jp/foo.css?20200123">

例えば上記の語尾を?20201204のように変えるとブラウザは必ずキャッシュからは読み込まないのでファイルを修正した場合は修正内容が必ず反映される。

クエリ文字列を自動更新

ファイルのURLの語尾の?以降を変えるとキャッシュを読み込まないが、逆に言うとクエリ文字列を変えなければキャッシュが読み込まれるためファイルの修正内容が反映されなくなってしまう。
(キャッシュが有効の場合)

手動だとクエリ文字列の修正は忘れやすい。しかし、PHPであればファイルの修正日時からクエリ文字列を自動生成できるので変更のし忘れが発生しなくなる。

クエリ文字列を自動生成するコード

ファイルの修正日時からクエリ文字列を自動生成するコードを作成するには適当な名前の関数を作成して引数にファイルのパスを入力する$fileを指定する。

関数内はdate_default_timezone_set('Asia/Tokyo');で日本時間を設定してファイルの更新時刻を取得するfiletimeを使用して取得後にdate使用して 'Y-m-d_H-i-s' の形式にする。

function ft($file) {
  date_default_timezone_set('Asia/Tokyo');
  echo '?' . date('Y-m-d_H-i-s', filemtime($file));
}

あとはファイルURLの語尾に<?php ft('/home/iwb/iwb.jp/public_html/s/syntaxhighlighter.css'); ?>のようにファイルのパスを入力すればクエリ文字列が修正するたびに自動生成される。

filetimeとdateを使用したクエリ文字列自動生成サンプル

カテゴリーphp