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