ぐらめぬ・ぜぷつぇんのはてダ(2007 to 2011)

2007年~2011年ごろまで はてなダイアリー に書いてた記事を引っ越してきました。

Controllerにある種のPHP文法エラーがあると、画面が真っ白でログにも何も出ない。


また嵌りました。PHP5で書いたスクリプトを事情によりPHP4のAkelosに移してて、そこで、Controllerに、PHP5でのクラス変数を使っている部分を残してました。

<?php
class FooController extends ApplicationController {
    function index() {
        // ...
        $var = Klass::Value;
        // ...
    }
}

すると、画面が真っ白けになってしまい、PHPのエラーログ出力にも何も出ないという恐怖の現象が発生しました。
原因は、AkRequest#recognize()中でcontrollerのファイルをinclude_onceしていますが、こんな感じでエラー抑制の"@"をつけているからです。
akelos-0.7.1/lib/AkRequest.php :

...
    function &recognize($Map = null)
    {
        // ...
        if(@!include_once($controller_path)){
            trigger_error(...);
        }

したがって、もしも上述のような現象になってしまう場合は、controllerファイルのPHP文法を確かめ、少なくともFatalエラーが出ないことを確認する必要があります。php-cliの"-l"オプションでLintさせても良いでしょうし、あるいは上の"@"を外してしまうのも良いでしょう。
どちらにせよ、エラーログにすら何も出ないというのは手がかりが0なので、非常に厄介です。



っつーかはっきり言って余計なお世話以外の何者でも無いんだけど。controllerって開発者しか触らないんだから、それがエラーだったらちゃんとエラーを出力して欲しいんだが。前にも何度かこれで嵌って、弄っているうちに解決したので気がつかなかったけど、いったいこれで何時間無駄にした。何のためのフレームワークかっつーの。あー、ホントむかつく。