0

出力バッファに問題があります。スクリプトをバッファリングし、コールバックを使用して結果を出力しています。問題は、いずれかの時点でエラーがスローされた場合、何も表示されず、空白の画面が表示されることです。独自のカスタムエラーハンドラーを設定しようとしましたが、何も機能しないようです。これは、エラーが原因で、バッファがエラーハンドラではなくコールバックメソッドを呼び出すためだと感じています。それか、静的メソッドとしてエラーハンドラーがあるためですが、それを変更すると他の場所で問題が発生します。

これは私を困惑させているので、私は本当に助けていただければ幸いです!

public function constructor()
{
    ob_start(array(__CLASS__, 'render'));
    self::$buffer_level = ob_get_level();

    set_error_handler(array(__CLASS__, 'exception_handler'));
    set_exception_handler(array(_CLASS__, 'exception_handler'));

    RUNNING MY SCRIPT HERE

    ob_end_flush();
}

public static function exception_handler($exception, $message = NULL, $file = NULL, $line = NULL)
{
    while (ob_get_level() > self::$buffer_level)
    {
    ob_end_clean();
    }

    echo $exception.' - '.$message.' - '.$file.' - '.$line.'<br/>';
}
4

1 に答える 1

1

デフォルトでApacheエラーログにエラーを送信するPHPでエラーログを有効にすることをお勧めします。track_errors をオンにすることもできますが、ログが最善の策だと思います。Apache ログにアクセスできない場合は、手動でログを記録する必要があります。

出力バッファリングやその他の「舞台裏」のもの (ajax など) を使用する場合は、ログ ファイルとトレース戦略が不可欠です。

また、output_buffering 設定を確認することもできます。この記事を参照してください: http://thinkpositivesoftware.blogspot.com/2009/03/have-blank-php-page.html

于 2010-01-01T04:38:56.863 に答える