0

私はより良いPHPエラーハンドラーを見つけようとしました。これはhtmlで読みやすくなりますが、googleには何も表示されません。

自分で作ってみましたが、コマンドを理解するのに時間がかかり、多くのエラーが発生しました。

これがphpが現在生成しているゴミです(ファイル、クラス、関数名が変更されています):

Fatal error: Cannot redeclare bbb() (previously declared in /home/user/path/1.php:5) in /home/user/path/1.php on line 26 Call Stack: 0.0309 662280 1. {main}() /home/user/path/1.php:0 0.0610 5610272 2. su::aaa() /home/user/path/1.php:21 0.0610 5610752 3. su::__callStatic() /home/user/path/class.su.php:0 0.0610 5611456 4. call_user_func_array() /home/user/path/class.su.php:27 0.0610 5611912 5. user->aaa() /home/user/path/class.su.php:0 0.0628 5670816 6. user->aaa() /home/user/path/class.user.php:3342 0.0628 5671640 7. user->aaa() /home/user/path/class.user.php:3407 0.0628 5672464 8. user->sss() /home/user/path/class.user.php:3449 0.0628 5679576 9. DA->ccc() /home/user/path/class.user.php:3475 

それはすべて1行であり、実際に何が起こっているのかを頭の中でうまく解析することはできません。この呼び出しスタックを素敵なhtmlとして出力したいのですが。

ありがとう、エリヤ

4

3 に答える 3

1

使用set_error_handler()それはそのために特別に設計されています。次の引数を受け入れる関数を定義します。

handler_function ( int $errno , string $errstr [, string $errfile [, int $errline [, array $errcontext ]]] )

そしてset_error_handler()、デフォルトのPHPハンドラーの代わりにそれを使用する必要があります。最初にマニュアルエントリ全体を必ずお読みください。

于 2012-04-19T22:16:15.000 に答える
0

私が探していた関数はdebug_backtraceでした。これをエラーハンドラーに実装することで、呼び出しスタックを出力することができました。

于 2012-04-20T13:25:35.623 に答える
0

あなたが望むもののクリーンな実装があります http://il.php.net/manual/en/function.set-error-handler.phpそして簡単にカスタマイズすることができます

コード

function myErrorHandler($errno, $errstr, $errfile, $errline) {
    if (! (error_reporting () & $errno)) {
        // This error code is not included in error_reporting
        return;
    }

    switch ($errno) {
        case E_USER_ERROR :
            echo "<b>My ERROR</b> [$errno] $errstr<br />\n";
            echo "  Fatal error on line $errline in file $errfile";
            echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\n";
            echo "Aborting...<br />\n";
            exit ( 1 );
            break;

        case E_USER_WARNING :
            echo "<b>My WARNING</b> [$errno] $errstr<br />\n";
            break;

        case E_USER_NOTICE :
            echo "<b>My NOTICE</b> [$errno] $errstr<br />\n";
            break;

        default :
            echo "Unknown error type: [$errno] $errstr<br />\n";
            break;
    }

    /* Don't execute PHP internal error handler */
    return true;
}

これがあなたが望むものでない場合は、よりよく説明してください

于 2012-04-19T22:23:58.403 に答える