зачем мне заканчивать мой ob_start ()? - PullRequest
9 голосов
/ 08 ноября 2010

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

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

Ответы [ 3 ]

9 голосов
/ 08 ноября 2010

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

0 голосов
/ 08 ноября 2010

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

0 голосов
/ 08 ноября 2010

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

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

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

...