Difference between ob_clean and ob_flush?
the *_clean
variants just empty the buffer, whereas *_flush
functions print what is in the buffer (send the contents to the output buffer).
Example:
ob_start();print "foo"; // This never prints because ob_end_clean just emptiesob_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)
The key difference is*_clean()
discards changes and *_flush()
outputs to the browser.
Usage of ob_end_clean()
it is mostly used when you want to have a chunk of html and do not want to output to the browser right away but may be used in future.
Eg.
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);
where as ob_end_flush()
will render twice, once for each.