PHPの無名関数とeAccelerator の相性にに関して
以前以下のようなポストをした
spl_autoload_registerで無名関数を使ったときのエラーが出て解決できない - にっき
思い立って再調査
環境
- PHP5.4
現象
cliでは無名関数が使えるのに、WEB経由だと無名関数がNULLになってしまう
同等の環境を手元に作ってWEB経由で検証したら、普通に無名関数が使えたので環境的な差分をチェック
環境的な違いはeAcceleratorが入っているか、いないかの違い
んで
eAcceleratorを.htaccess使ってオフにしてみた
php_flag eaccelerator.enable 0 php_flag eaccelerator.optimizer 0
そしたらビンゴ!
WEB経由でも無名関数が使えるようになった
予想ではあるけど、eAcceleratorのキャッシュが無名関数に非対応とかそんなんじゃないのかな?
設定でなんとかなるのかもしれないし、その他の方法で大丈夫になるかもしれないし
原因はつきとめたけど、解決方法はこれから探します
ちなみにPHPマニュアルの無名関数のところにコメントついてた・・・orz
PHP: 無名関数 - Manual
eAcceleratorのgithubのissuesにも載ってた
eAccelerator not compatible with anonymous function/closure under php 5.4.6 · Issue #12 · eaccelerator/eaccelerator · GitHub
Dose eaccelerator latest version support PHP5 CLOSURE FEATURES? · Issue #36 · eaccelerator/eaccelerator · GitHub
っていうかeAcceleratorは推奨しないプロジェクトですよってPullRequestも来てるし・・・orz
Explain that eAccelerator is a deprecated project by mattab · Pull Request #44 · eaccelerator/eaccelerator · GitHub
APCを検討だな