今更ながら、ローカル環境で使っているMAMPを少しバージョンアップ(2.2)し、PHP5.5.3で開発をしています。
ところが、この環境で更新したはずのプログラムが、ブラウザのキャッシュが効いているかのようになかなか反映されないという現象が起こりました。
テスト用に使っているローカル環境ですし、更新したプログラムはすぐに確認したいもの…すぐに確認できないのは不便です。
MAMPをお使いでPHP5.5以降をお使いの方であれば、同じような現象にお困りのかたもおられるのではないでしょうか?
そこで、MAMPのPHP5.5以降で更新したプログラムを、すぐに反映させるための対処方法をご紹介したいと思います。
まず、今回の現象の原因についてですが、PHP5.5で搭載された「OPcache」という機能が関係しています。
名前からして、なにかしらのキャッシュ機能が働いていることが想像できるのではないでしょうか。
この機能はPHPの設定ファイルである php.ini でコントロールされていて、このphp.ini の設定を変更することでキャッシュ機能を無効化することができます。
念のため、「OPcache」について調べてみたのですが、以下のような働きをするようです。
・プログラム実行時にオペコード(バイトコード)をメモリーにキャッシュ(保持・再利用)することで、応答速度の改善や、サーバ負荷を低減をさせる。
PHPはプログラムを実行するたびにソースコードを解析して処理を行いますが、 新機能のキャッシュによって、高速化や負荷を低減させたりすることができるようになったということでしょう。
私のローカル環境(MAMP)は、あくまでも開発用でコードキャッシュは不要なため、 php.ini を編集してOPcacheの部分を変更することにしました。
php.ini に書かれた OPcache の設定を変更
お使いのMacより、以下の php.ini ファイルを開きます。
/Applications/MAMP/bin/php/php5.5.3/conf/php.ini
php.ini からOPcacheという文字列を検索すると、以下のような内容が見つかると思いますので、この値を以下のように変更します。
opcache.enable_cli=0 に変更。
opcache.enable=0 を追記。
1 2 3 4 5 6 7 8 9 |
[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 |
上記の設定が済みましたら、ファイルを保存し、最後に MAMP を再起動します。
MAMPをお使いの方で、更新したプログラムが即座に反映されない場合はOPcacheの設定を疑ってみてください。