2012-02-11 13 views
2

致命的なエラーでスクリプトを終了しても、私のバッファを出力できますか?私はheader/content/footerを実行するテンプレートシステムを使用しています。だから、fatal_error()関数でコードを実行するのをやめようとしますが、まだバッファテンプレートを出力します(Webテンプレートを維持しながらエラーメッセージをユーザーに送ります)。私はob_start("ob_gzhandler")を使用し、私のfatal_error()関数私はob_flush()を使用し、fatal_error()が呼び出されると白い画面になります。ここに私の関数がPHP終了とまだ出力バッファ

function fatal_error($error_message, $log = true) 
{ 
    setup_error($error_message); 

    ob_flush(); 
    exit(); 
} 

setup_error()です(エラーが発生したときに、それは1/2の体を解析しません)エラーメッセージにコンテンツ本体を変更するためにスクリプトに指示します。私が見てきたすべての例は、ob_flush()またはob_end_flush()と言うことができますが、私は運がない。

答えて

4

set_error_handler()機能を使用してください。このようにして、ユーザ定義の関数fatal_error()をPHPにエラーが発生したときに実行するように割り当てることができます。バッファをフラッシュして終了するなど、自分の好きなことを何でもできます。

EDIT:

次のコードは、あなたが欲しいものを行う必要があります。

set_error_handler('fatal_error', E_ERROR, E_USER_ERROR); 

function fatal_error($errno, $errstr, $errfile, $errline) 
{ 
    ob_flush(); 
    exit(); 
} 

EDIT 2:あなたはE_ERRORをトリガし、したがって、そのようfatal_error()機能をテストすることができます

trigger_error('This is a test error', E_ERROR); 
+0

ゴールデン。ありがとうございました。 –

+0

あなたは大歓迎です:) – VettelS

2

flush()への呼び出しをob_flush()の前に追加しようとします。ときには、両方とも必要になることがあります。

+0

でも、まだ白い画面しか出力していません。 –

+0

'setup_error()'のコードを見ることはできますか? –

+0

テンプレートは、 'ob_flush'の後まで出力されていませんでした。私はそれを見た。 –

関連する問題