私は一週間で少し問題にぶつかりました。これに関するエラーメッセージは次のとおりです。
[30-Dec-2012 15:19:32] PHPの致命的なエラー:0行目の不明でスタックフレームなしで例外がスローされました
私のエラーハンドラー(詳細は以下を参照)がエラーを例外に変えているためだと思います。スタックフレームがない場合は、それを防ぐ必要があるかもしれません。
PHPにスタックフレームがあるかどうかを確認する簡単な方法はありますか?
詳細:
私のWebサイトの1つで、すべてのエラーを例外に変換するエラーハンドラーを実行しています。これは、ErrorException
正確には一般的です。
サイトは主にレガシーコードであり、問題が発生して例外が発生するようにしたかったので、少し前に紹介しました。最終的に合理化された方法で例外ハンドラーを「キャッチ」し、リクエストを停止できます。
これを独自のクラスに入れ、ハンドラーを登録し、並行して出力バッファーを開いて、例外がスローされるまで出力をキャッチします。基本的に次のようにコーディングします。
// register output buffering
$r = ob_start(array($this, 'handleBuffer'));
// register error handler
$this->_originalErrorHandler = set_error_handler(array($this, 'handleError'));
// register exception handler
$this->_originalExceptionHandler = set_exception_handler(array($this, 'handleException'));
別の出力バッファリングクラスをミックスに追加することを決定するまで、これはすべてうまく機能しました。すべての出力をキャッチし、HTMLの問題のチェックを含め、Webサイトで「ポストプロダクション」を実行できるのは1つだけです(はい、それはすべて少しレガシーなので、実際には少しダックテープです)。それも非常にうまくいきました。ただし、新しいコンポーネントを間違えたときはそうではありません。
[30-Dec-2012 15:19:32] PHPの致命的なエラー:0行目の不明でスタックフレームなしで例外がスローされました
これは基本的に私の問題です。これらのエラーを防ぐ簡単な方法はありますか?エラーが発生する理由はある程度わかっていますが、完全にはわからないため、問題を回避するのは困難です。スクリプトが新しいシャットダウンフェーズに入る前に、新しい出力バッファーを解放しようとしました。これにより、これが発生すると考えたためです。しかし、これはうまくいきませんでした。