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を検討だな