ob_clean()
とob_flush()
の違いは何ですか?
また、ob_end_clean()
とob_end_flush()
の違いは何ですか? ob_get_clean()
とob_get_flush()
はどちらもコンテンツを取得し、出力バッファリングを終了します。
*_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)
主な違いは、*_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回ずつ)。