При использовании 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 на экране в рабочей среде, поэтому вам не нужно будет использовать подавитель ошибок @.