Буферизация вывода — временное хранение вывода перед сбросом, перед отправкой и удалением, в браузер в веб-контексте или в командную оболочку в контексте командной строки. Пока буферизация вывода активна, вывод из скрипта не отправляется, вместо этого вывод сохраняется во внутреннем буфере.
PHP опирается на базовую программно-аппаратную инфраструктуру при сбросе вывода. Буферизация, которую реализуют консоли в командной строке (например, с буферизацией строк) или веб-серверами и браузером в веб-контексте (например, с полной буферизацией), влияет на то, когда вывод отображается конечному пользователю. Часть этих эффектов получится устранить тонкой настройкой параметров сервера и (или) выравниванием размеров буферов на разных уровнях.
Разработчики PHP предусмотрели полностью буферизованный пользовательский буфер вывода с функциями для запуска, манипулирования и отключения буфера (бо́льшая часть ob_*-функций), и две функции для сброса базовых системных буферов (функции flush() и ob_implicit_flush()). Часть этой функциональности также устанавливают и (или) конфигурируют в настройках файла php.ini.
Буферизация вывода полезна в ситуациях, в которых буферизованный вывод изменяется или проверяется, или его переиспользуют в запросе; или когда требуется контролируемая очистка выходных данных. Конкретные сценарии работы с буферами включают:
HTML
-страниц
head
— заголовка HTML
-страницы —
до отправки элемента body
— тела страницы, чтобы разрешить браузерам
загружать внешние ресурсы, пока скрипт получает доступ к базе данных или файлу,
устанавливает внешнее сетевое соединение или решает другие трудоёмкие задачи.
Это полезно только тогда, когда HTTP
-код состояния
нельзя изменить после отправки заголовков
HTML
-тегов),
или полного отказа от этого кода при конкретных условиях, например при ошибках