開発環境ではコードレベルのキャッシュをしたくない
高速化というWordPress利用者にはホットなテーマがある。その中の一つの方法としてphpのコードレベルのキャッシュという方法があり、効果的な高速化手法とされている。
当初dim5.netでもphpコードレベルのキャッシュを設定したサーバで運用をしていたのだが、テーマファイルの編集時に毎回キャッシュされたコードを削除するのが面倒なのでeAcceleratorのキャッシュ機能をオフにしていた。
virtualhost単位でキャッシュの有効無効を制御
サーバのphp.iniでeAcceleratorがオンになっている環境下で、virtual hostレベルで以下の設定を行うことでコードキャッシュをオフにすることができる。
php_flag eaccelerator.enable 0
php.iniでeaccelerator.enable 1になっているのを0に再設定することでeacceleratorをそのvirtual hostにおいてはオフにできる。
当然この設定でキャッシュはされなくなるので、制作や開発時のテーマ編集等は効率的に進めることができる。しかし、キャッシュされないのでアクセスが増えた際にはサーバへの負担は大きくなる。デフォルトでキャッシュをしつつ、開発時はキャッシュをしない設定を行おうと暇なときに考えていたのだが、今回は以下の方法でやってみることにした。
wordpress側でキャッシュを制御する
まず、上の方法で設定したあるvirtual hostに対するキャッシュ拒否設定を削除し、ほかのvirtual host同様コードレベルのキャッシュを有効化した。次にwordpressのアプリケーション側に以下のコードを追加した。
if( strpos(getenv("REMOTE_ADDR"), "192.168.0") !== false ) { ini_set('eaccelerator.enable', '0'); }
eaccelerator.enableの設定はvirtual hostだけでなく、phpアプリケーション側でも設定を変更することが可能です。上のコードでローカルエリアネットワーク内においては、サーバ側(php.ini)で設定したeaccelerator.enableの値をオフにすることができます。
このコードをwordpressアプリケーションのルートのindex.phpの先頭に追記することでローカルエリアネットワーク内からのアクセスの場合にはキャッシュを拒否、外のネットワークからのアクセスの場合はキャッシュをするという設定になります。