6

出力バッファリングがどのように機能するかは正確にはわかりませんが、知る限り、コンテンツを内部変数に保存します。

これに関して、出力バッファリングを使用せず、代わりに自分のローカル変数にコンテンツを保存し、スクリプトの最後にエコーすることの違いは何ですか?

出力バッファリングの例:

<?php
  ob_start();
  echo "html page goes here";
  ob_end_flush();
?>

出力バッファリングを使用しない例:

<?php
  $html = "html page goes here";
  echo $html;
?>

違いはなんですか?

4

2 に答える 2

6

主な違い:

1.)「通常の」出力構文を使用できるため、たとえばechoステートメント。問題を書き直す必要はありません。

2.)バッファをスタックできるため、バッファリングをより適切に制御できます。命名規則などを知る必要はありません。これにより、書き込み側と使用側が別々に実装されている場合の実装が容易になります。

3.)バッファリングされたコンテンツを出力するために追加のロジックは必要ありませんflush。出力ストリームが特別なものである場合は特に興味深いです。なぜそれを処理することで制御スコープに負担をかけるのですか?

4.)出力バッファが作成されているかどうかに関係なく、同じ出力実装を使用できます。これは透明性の問題です。

5.)警告などの泡立ったものを誤って「キャッチ」し、後でそれを飲み込むことができます。

[...]

于 2013-01-26T15:53:58.477 に答える
6

出力バッファリングにより、既存のコードを変更することなく、を出力するか、いつ出力するか、どのように出力するかという問題をより柔軟に分離できます。

出力を返すのではなく、出力をエコーする既存のコードがある場合があります。出力バッファリングにより、そのコードを変更せずに実行できます。

明らかなことに加えて、出力を再び変数にキャプチャするために続けてob_end_flush()使用することもできます。これにより、画面に表示する代わりにファイルに書き込むことができます。$output = ob_get_contents()ob_end_clean()

最後に、オンザフライでの圧縮を可能にするフィルターを出力バッファリングシステムにフックできます。

参照:ob_gz_handler

于 2013-01-26T15:55:59.393 に答える