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