はストリーム状にPHPの標準出力のデータをフィルタリングすることが可能です:PHPの標準出力データをストリームフィルタリングする方法は?
standard output ⟶ output filter ⟶ standard output
は、私はすでにob_start
の意識です。しかし、出力全体を一度に処理するのではなく、php_user_filterなどのストリームを使用して処理したいと考えています。
はストリーム状にPHPの標準出力のデータをフィルタリングすることが可能です:PHPの標準出力データをストリームフィルタリングする方法は?
standard output ⟶ output filter ⟶ standard output
は、私はすでにob_start
の意識です。しかし、出力全体を一度に処理するのではなく、php_user_filterなどのストリームを使用して処理したいと考えています。
私はこれが何であるかはよく分かりませんが、回答を投稿しない理由はありません。
ob_start()
コールバックを使用して、部分のコンテンツを処理することができます。あなたがしなければならないのは、初期化直後にob_implicit_flush()
に設定するだけです。今、通常のコールバックはシンプルでアウト機能ですが、あなたが望むようにはのような複雑にすることができます。
class ob_callback {
function __invoke($part, $end_flag_0x04) {
return "+$part";
// or map to $stream->filter($in, $out, &$consumed, $closing)
}
function __destruct() { /* cleanup */ }
}
ob_start(new ob_callback, 2);
ob_implicit_flush(TRUE);
私はストリーム-yの使用がどのようになるかわかりません。しかし、PHPの標準出力を傍受する方法は他にありません。暗黙的なフラッシュはCLIでは機能しません。
あなたの質問が正しく分かっている場合は、ob_start()
、$chunk_size
に2番目の引数を使用できます。
ob_start('my_callback', 1024);
上記の例では、出力バッファが1キロバイトに達するか、超えることが原因my_callback()
たびに呼び出すことになります。個別の文で数キロバイトを吐き出すと、my_callback()
が何度もトリガされます。単一の文字列として数キロバイトを出力していた場合は、最大でmy_callback()
を出力ごとに1回しか起動できないので、これは役に立ちません。
したがって、標準出力に変更されるコールバックを定義することを覚えておいてください。はいの場合、そのコールバックはいつ呼び出されますか(頻度) – Jon
@Jon:呼び出しの数は、出力チャンクの数(例えば、 'echo'パラメータ、出力の行、またはいくつかの内部バッファなど)によって決まる可能性があります。あるいは単に呼び出されたばかりであり、各チャンクを処理する準無限ループ中にチェックできるストリーム状態が存在します。 – Gumbo