PHPソースを変更してもブラウザに表示される情報は古いままで更新されない事があります。ブラウザキャッシュを初期化しても変更されない場合は php.ini の opcache.revalidate_freq を確認します。
opcache.revalidate_freq は PHPコードをメモリにキャッシュするOPcacheの設定の一つで、phpファイルの更新時間をチェックする間隔です。
推奨値は 60 となっていますが、テスト環境などで頻繁に更新する場合は低い値にしないとキャッシュが使用され古いphpソースが利用されてしまいます。
opcache.revalidate_freq の確認方法はphp.iniを開くか、phpを直接開けない場合は phpinfo を使って調べます。(phpinfoが禁止されている場合もあります)
<html> <head> <title>phpinfo</title> </head> <body> <?php phpinfo(); ?> </body> </html>
5つの方法で変更できます、先頭の3つはサーバー側が許可してなければできません
php.ini を開き opcache.revalidate_freqを探して値を変更します。注意点はWebサイト全体に反映されるのでディレクトリ単位で制御したい場合は使用できません。
opcache.revalidate_freq = 60 ↓ opcache.revalidate_freq = 1
(未検証)ディレクトリの .user.ini を開き opcache.revalidate_freq の値を変更します。(ファイルやキーが無ければ新規作成)、注意点はモジュール版では動作しません、また.user.iniの更新間隔は5分単位なので初期設定を間違えると5分間反映されません。
opcache.revalidate_freq = 1
ディレクトリの.htaccess を開き opcache.revalidate_freq の設定を追加または変更します。注意点はWebサーバーがApachの以外の場合は.htaccessをサポートしていない場合があります。
.htaccessの最後に下記を追加
<Files *.php> php_value opcache.revalidate_freq "1" </Files>
phpコード中で opcache_reset()関数を使用すると全てのOPcacheを削除します。注意点は初回実行時はキャッシュから読み込まれているので2回目以降から有効になります。またphpファイル別にキャッシュを削除したい場合はopcache_invalidate()を使用します
<?php opcache_reset(); ?>
phpコード中でopcache_invalidate()関数を使用すると任意のphpファイルのキャッシュを削除できます。注意点は初回実行時はキャッシュから読み込まれているので2回目以降から有効になります。
使い方
opcache_invalidate('パスとファイル名'); opcache_invalidate('パスとファイル名',TRUE);
TRUEが無い場合はタイムスタンプが新しい場合にのみキャッシュを削除します。TRUEがある場合は必ずキャッシュを削除します。
<?php opcache_reset('./lib/sample.php',TRUE); ?>