したがって、出力バッファリングを使用するアプリケーションがあり、アプリケーションが期待される結果に加えていくつかの余分なデータを返す場合があります。期待される結果が出力バッファに追加されているポイントを操作して、アプリケーションのこの時点で出力バッファに送信されるデータが正しいことを確認することができます。したがって、予期せぬ余分なデータが別のソースから来ている必要があります。出力バッファへの呼び出しを追跡する方法
私はこの問題がPHPスクリプトタグの中にない浮遊文字だと思っていますが、どのファイル(もしあれば)が原因であるのかわかりません。私が知っている限り、追加のデータを明示的にecho
しているファイルが含まれている可能性があります。
私は出力バッファに書き込むファイルのファイル名と行番号を取得したいと考えていましたが、これは予想よりもはるかに困難であることがわかりました。私は最初のob_start
がどこにあるか知っているので、私はカスタムoutput_callback
を使用しようとしてきました。ここで私はすでに試したいくつかのことです。
ob_start(function($string) {
return __FILE__ . ":" . __LINE__ . " : " $string;
});
これは、関数が定義されているファイル名と行番号を返し、ないそれはから(予想通り、私は推測するが、悪いスタートを切ったと呼ばれた場所)。
ob_start(function($string) {
return print_r(debug_print_backtrace(), true) . " : " $string;
});
これは、ラムダ関数の破壊に関するエラーをスローします。
これは、結果が混在していました。なぜ私は完全にはわからないと認めます。しかし、ほとんどの場合、var_dump
は空の文字列(何もない)に解決されましたが、ある場合はトレース配列を生成するように見えましたが、ob_start呼び出しの起点を反映するものはありませんでした(つまり、実際にecho
と呼ばれたソースファイルはトレースの一部ではありませんでした)。
上記の説明では、カスタムのoutput_callback
機能をトラブルシューティングのコンテキストにドロップする準備ができたときに、その機能がどのように見えるかを理解するためにかなり基本的なテストを行ってきました。問題はアプリケーション固有ではないので、出力関数(エコー、プリントなど)を傍受し、その出力呼び出しの起点に関する情報を取得する一般的な方法を見つけることを試みています。
が、私はこれは、トラブルシューティングとして動作するとは思わない:終了タグの後に、すべてのPHPの空白を見つける
さらに多くのテストを行うと、出力バッファがフラッシュされたときにカスタムob_callback関数が呼び出されるようになりました。出力バッファが更新されるたびにコールバックをトリガする方法はありますか? – Anthony
いつものように機能するように 'php:// output'ストリームをオーバーライドすることは可能でしょうか(または推奨するでしょうか?)また、トレースファイルに対して調整できるタイムスタンプや他の識別子をエラーログに送りますか? – Anthony