CakePHP 1.2.5はPHP 4.3.10で動作しないけど、PHP 4.3.11にすると動く話
[ 2009.11.23 ] by h_takimoto | Categories:PHP, 技術情報
CakePHP 1.2.5を利用して開発したソースコードをサーバーにアップして
稼働確認すると、動作せず。
CakePHPを利用していて、環境を変更した事で発生する不具合の原因としては、
「mod_rewriteの設定ミス」や「テンポラリディレクトリの書込権限設定もれ」などが
あげられますが、今回の設定は正しい模様。
自前で作成したコードが悪いのか、CakePHPのライブラリが悪いのかを切り分けるため
試しに素のCakePHPをダウンロードし直して設置してみると、同様の事象が発生。
近道は諦めて、腰を据えてCakePHPをデバッグしてみる事にしました。
エラーログを出力してみると、CakePHPのライブラリ内でエラーが発生していました。
Fatal error: Call to a member function on a non-object in ./cake/libs/view/layouts/default.ctp on line 34
該当箇所を確認してみると
echo $html->meta('icon');
HTMLヘルパを使ってメタタグを出力している箇所で、オブジェクトが無いぞ!と怒られています。
通常では発生しない状況です。
デバッグを繰り返していると、CakePHPのヘルパを初期化する処理でoverload()している所で
異常に処理に時間がかかる場合が発生する事がわかりました。
しかし、怪しげな処理をしている様には見えないので、CakePHPではなく、
PHP自体の処理を疑ってPHP 4 ChangeLogを眺めてみました。
すると、4.3.10→4.3.11へのチェンジログで気になる箇所が。
Fixed bug #31106 (Fixed crash in overloaded objects). Fixed bug #28086 (crash inside overload() function).
具体的な挙動はわかりませんが、overloadに関する処理が修正されている様です。
という事は、4.3.11で動作させれば発生しないのでは!?と思い試してみると、正常に動作。
この事から、PHPのバグに触れてしまっている可能性が高いと考えられます。
また、この現象はWindows/LinuxどちらのOSでも発生しました。
CakePHPのドキュメントには
PHP 4.3.2 or greater. Yes, CakePHP works great on PHP 4 and 5.
と記述されていますが、実際は4.3.11以上で動作、という事になるようです。
PHP4.3.10というのは大分古いバージョンですので、本来であれば
PHP5やPHP4の最終バージョン(4.4.9)にバージョンアップするべきですが、
既存システムとの兼ね合いもあるため、簡単にはいきません。
またCakePHP自体を修正するという案もありましたが、
代替案がわからず、修正やテストにかける体力も無いため
今回は、別のサーバーで動作させる事となりました。
PHP4環境でCakePHPを動作させる場合は、ご注意ください。
滝本














最近のコメント