2012-05-03 5 views
0

PHPを 'キャッチ'しようとしていますregister_shutdown_functionで致命的なエラーが発生しましたので、きれいなエラーメッセージを返すことができます。PHP:register_shutdown_functionがsymfony 2で常に動作するとは限りません

単純なPHPファイルでは、以下の両方のテストケースが正しく処理され、カスタム500エラーが返されます。コントローラ内部のsymfonyの2アクション内から同じメカニズムを使用している場合

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'; 
} 
} 

はしかし、テストケース#2はもう処理されていません。私のハンドラが唯一の変数は以前に初期化されたときに呼び出されます。しかし、どちらの場合も、同じ種類の致命的なエラー(非オブジェクト上のメンバメソッドへの呼び出し)を扱います。

誰かが助けることができますか?

答えて

1

デバッグモードでは、symfony2はと競合する可能性があるset_error_handlerを呼び出します。生産モードではそれは起こりません。

+0

ありがとうございました!私はまだ混乱しています...私はErrorHandler.phpでSymfony2のハンドラを使ってデバッグしました。上記の両方のテストケースについて、エラーは同じ方法で処理されます。私自身のハンドラはそれらのうちの1つだけをキャッチします – David

関連する問題