Вызывает ли вызов ob_end_clean () один раз в верхней части скрипта, гарантировать, что ob_flush () никогда не требуется?

При использовании PHP в качестве @ob_flush();@flush() для SSE (событий, отправленных сервером) и подобных серверных потоковых решений я использую @ob_flush();@flush() чтобы убедиться, что данные сразу выплевываются. (Важно упорядочить порядок: ob_flush() очищает буферы PHP, flush() сообщает Apache, чтобы он тоже ob_flush() .)

Я начал думать об этом после прочтения, что @ медленный. (Фактически, согласно комментариям в руководстве по PHP, он добавляет примерно 0,005 мс, поэтому я переклассифицировал «медленный» как «не волнуйся об этом, если не находится в замкнутом цикле»). Мне нужно @ on ob_flush() чтобы он не жаловался, когда выходной буфер пуст. BTW, я следил за исходным кодом, пока он не достиг Apache, и он выглядит flush() не вызывает никаких ошибок PHP.

Теперь мне интересно, могу ли я уменьшить приведенные выше @ob_flush();@flush() до просто @flush() (или даже просто flush() )? Снова в комментариях к PHP в PHP я нахожу, что кто-то говорит, что вы можете сделать это в верхней части вашего скрипта: if (ob_get_level()) ob_end_clean(); (Который может быть сокращен просто @ob_end_clean(); )

Мой вопрос: является ли надежная команда означать, что буферизация вывода никогда не будет использоваться, и ob_flush() никогда не понадобится? Во всех версиях PHP (ну, по крайней мере, php 5.2) и всех поддерживаемых операционных системах, с любыми странными настройками, которые пользователь мог бы добавить в php.ini?

(Если ваш ответ «нет», пожалуйста, опишите, в каких ситуациях может потребоваться ob_flush() .)

Возможно, это то, что вы ищете: http://www.php.net/manual/en/function.ob-implicit-flush.php

 //at start of script... ob_implicit_flush(true); ob_end_flush(); 

возвращает небуферизованный вывод

Сторона Примечание. Вы не должны отображать ошибки php на экране в рабочей среде, поэтому вам не нужно будет использовать подавитель ошибок @.