致命的なエラーをキャプチャするために、クラス内の関数にはob_startポイント
-
20-09-2019 - |
質問
私は、Webサービスを呼び出す方法を提供返すXMLを解析し、JSONオブジェクトを返しますPHPでのジェネリッククラスを作成しようとしています。
私はCURLおよび/またはJSONをサポートし、優雅に戻ってクライアントにJSONオブジェクトにエラーを返すのではなく、クラッシュする方法を見ていないサーバ上で致命的なエラーに遭遇した。
いくつか検索した後、私は記事を見つけましたそれは私がob_start("fatal_error_handler")
を呼び出し、ハンドラ関数を提供することができ示唆します:
function fatal_error_handler($buffer) {
if (ereg("(error</b>:)(.+)(<br)", $buffer, $regs) ) {
$err = preg_replace("/<.*?>/","",$regs[2]);
$buffer = json_encode(array("errorMessage" => "Fatal error occurred", "exceptionMessage" => $err));
}
return $buffer;
}
、スクリプトの最後にob_end_flush
を呼び出します。この
の をうまく働いたが、私は今、私のクラスにその機能を追加したいです。私が試した、と次のコンストラクタとデストラクタを追加することで、成功します:
function __construct() {
ob_start("fatal_error_handler");
}
function __destruct() {
ob_end_flush();
}
しかし、私はクラスにハンドラ関数を移動しようとしたとき、私はob_start()
コールにそれを追加することができます方法はありませんでした。私は(WebServiceが私のクラス名である)ob_start("$this->fatal_error_handler")
を試みたが、ob_start("WebService::fatal_error_handler")
- 無駄に
この私の質問は、どのように私は私のコンストラクタに含まob_start
するクラスの関数の名前を渡しますされます。
ボーナス質問:私はこの権利をやっている、またはクライアントが処理できる方法
で致命的なエラーを処理するAAより良い方法はありますか?解決
ob_start(array($this, 'fatal_error_handler'));
所属していません StackOverflow