-1

クリーンなエラー メッセージを返すことができるように、register_shutdown_function で PHP の致命的なエラーを「キャッチ」しようとしています。

単純な PHP ファイルでは、以下の両方のテスト ケースが正しく処理され、カスタム 500 エラーが返されます。

register_shutdown_function('handleShutdown');

//Test Case #1
$nullVar = null;
$nullVar->test();

//Test case #2
$uninitialisedVar->test();


function handleShutdown()
{
$error = error_get_last();
if ($error !== NULL)
{
    ob_clean();
    header('HTTP/1.0 500 Internal Server Error');
    echo 'Something bad happened';
}
}

ただし、コントローラー内の Symfony 2 アクション内から同じメカニズムを使用する場合、テスト ケース #2 は処理されなくなります。私のハンドラーは、変数が以前に初期化された場合にのみ呼び出されます。ただし、どちらの場合も、同じ種類の致命的なエラー (非オブジェクトのメンバー メソッドの呼び出し) を処理しています。

誰か助けてくれませんか?

4

1 に答える 1

1

デバッグモードset_error_handlerでは、register_shutdown_function. 本番モードでは発生しません。

于 2012-05-03T10:05:25.827 に答える