web-dev-qa-db-ja.com

ob_cleanとob_flushの違いは?

ob_clean()ob_flush()の違いは何ですか?

また、ob_end_clean()ob_end_flush()の違いは何ですか? ob_get_clean()ob_get_flush()はどちらもコンテンツを取得し、出力バッファリングを終了します。

36
Alex V

*_cleanバリアントはバッファを空にするだけですが、*_flush関数は、バッファーの内容を出力します(内容を出力バッファーに送信します)。

例:

ob_start();
print "foo";      // This never prints because ob_end_clean just empties
ob_end_clean();   //    the buffer and never prints or returns anything.

ob_start();
print "bar";      // This IS printed, but just not right here.
ob_end_flush();   // It's printed here, because ob_end_flush "prints" what's in
                  // the buffer, rather than returning it
                  //     (unlike the ob_get_* functions)
54
Adam Wagner

主な違いは、*_clean()が変更を破棄し、*_flush()がブラウザーに出力されることです。

ob_end_clean()の使用法

これは主に、htmlのチャンクが必要で、すぐにブラウザーに出力したくないが、将来使用される可能性がある場合に使用されます。

例えば。

_ob_start()
echo "<some html chunk>";
$htmlIntermediateData = ob_get_contents();
ob_end_clean();

{{some more business logic}}

ob_start();
echo "<some html chunk>";
$someMoreCode = ob_get_content();
ob_end_clean();

renderTogether($htmlIntermediateCode, $someMoreCode);
_

ここで、ob_end_flush()は2回レンダリングされます(それぞれ1回ずつ)。

0
Arun Gangula