強火で進め

このブログではプログラム関連の記事を中心に書いてます。

PHP 5.5 を使った時にキャッシュが効いてプログラムの変更が即、反映されなかった

MacMAMPで使っているPHPを5.5に変更したらキャッシュが効いてプログラムの変更が即、反映されないという症状が発生しました。

調べてみると PHP 5.5 から OPcache というネイティブキャッシュがデフォルトで有効に成っている為に発生したみたいです。

詳しくはこちらのスライドの5ページ目を参照。

自分がインストールしたのが5.5.3だったので /Applications/MAMP/bin/php/php5.5.3/conf/php.ini を開き、 opcache.enable_cli=0 に変更し、その次の行に opcache.enable=0 を追加し(※)、Apacheを再起動するとちゃんと即、反映される様に
※デフォルト有効なため、デフォルトだと php.ini に記述が無いみたいです。

【最終的な[OPcache]の設定】

[OPcache]
zend_extension="/Applications/MAMP/bin/php/php5.5.3/lib/php/extensions/no-debug-non-zts-20121212/opcache.so"
  opcache.memory_consumption=128
  opcache.interned_strings_buffer=8
  opcache.max_accelerated_files=4000
  opcache.revalidate_freq=60
  opcache.fast_shutdown=1
  opcache.enable_cli=0
  opcache.enable=0

(2013/12/19 追記)
OPcacheはその名前とは異なり、キャッシュ処理だけではなく、コードの最適化もしてくれるみたいです。その為、キャッシュはさせたくないけど最適化の恩恵は受けたいという場合にはOPcacheを無効にするのでは無く、更新チェック頻度の指定(秒)を0( opcache.revalidate_freq=0 )にして対応するのが良いでしょう。

後、プログラム内で強制的に更新させたい場合には opcache_reset() や opcache_invalidate() 関数で行えます。
(追記ここまで)

関連情報

PHP: 実行時設定 - Manual
http://www.php.net/manual/ja/opcache.configuration.php