зачем мне заканчивать ob_start ()?

Документация php предполагает, что я должен закончить каждый ob_start () с ob_end_flush (). Я использую один на каждой странице сайта, чтобы позволить мне использовать методы журнала firephp в любом месте приложения.

приложение работает отлично, но мне интересно, есть ли что-то, что я не знаю, что может быть вредным.

Я считаю, что причина этого предложения заключается в том, что PHP неявно очищает выходной буфер, если не использует одну из функций ob_end_* . Хотя это и не ошибка, это может вызвать проблемы, если вы этого не ожидаете. PHP-документы пытаются защитить вас от подобных проблем. Если вы знаете о неявном флеше, это, вероятно, не проблема.

Вы можете использовать буферизацию вывода как

 <?php ob_start(); echo "Some text you want to echo on page!!"; header("Location:somepage.php"); ob_end_flush(); ?> 

Проблема в том, что мы не можем отправить заголовок после начала отправки вывода. Для этого мы буферизируем вывод. Функция ob_start включает буферизацию вывода. В то время как буферизация вывода активна, никакой вывод не отправляется из сценария (кроме заголовков), вместо этого вывод сохраняется во внутреннем буфере. Таким образом, выход эха будет буферизирован. Затем мы отправляем заголовок без каких-либо проблем, поскольку мы еще не выплюнули какой-либо вывод. Наконец, мы вызываем ob_end_flush, чтобы очистить содержимое внутреннего буфера и остановить буферизацию вывода.

если есть петли, например, кто-то может начать буферизацию. И называет вашу функцию. Когда он пытается ob_end_flush, код собирает ваше содержимое.