И какая разница между ob_end_clean() и ob_end_flush()? Я знаю, что ob_get_clean() и ob_get_flush() получают содержимое и завершают буферизацию вывода.
Ответ 1
Варианты *_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 printed here, because ob_end_flush "prints" what in
// the buffer, rather than returning it
// (unlike the ob_get_* functions)
Ответ 2
Основное отличие заключается в том, что *_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() будет отображаться дважды, по одному для каждого.