International PHP Conference Berlin 2025

Буферизация вывода

Буферизация вывода — временное хранение вывода перед сбросом, перед отправкой и удалением, в браузер в веб-контексте или в командную оболочку в контексте командной строки. Пока буферизация вывода активна, вывод из скрипта не отправляется, вместо этого вывод сохраняется во внутреннем буфере.

Буферизация, которая влияет на PHP

PHP опирается на базовую программно-аппаратную инфраструктуру при сбросе вывода. Буферизация, которую реализуют консоли в командной строке (например, с буферизацией строк) или веб-серверами и браузером в веб-контексте (например, с полной буферизацией), влияет на то, когда вывод отображается конечному пользователю. Часть этих эффектов получится устранить тонкой настройкой параметров сервера и (или) выравниванием размеров буферов на разных уровнях.

Контроль буферизации вывода в PHP

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

Когда полезна буферизация

Буферизация вывода полезна в ситуациях, в которых буферизованный вывод изменяется или проверяется, или его переиспользуют в запросе; или когда требуется контролируемая очистка выходных данных. Конкретные сценарии работы с буферами включают:

  • Кеширование результатов выполнения скриптов, которые требуют сложных вычислений или времени, например при генерации статических HTML-страниц
  • Переиспользование сгенерированного вывода путём его отображения, сохранения в файл и (или) отправки по электронной почте
  • Сброс элемента head — заголовка HTML-страницы — до отправки элемента body — тела страницы, чтобы разрешить браузерам загружать внешние ресурсы, пока скрипт получает доступ к базе данных или файлу, устанавливает внешнее сетевое соединение или решает другие трудоёмкие задачи. Это полезно только тогда, когда HTTP-код состояния нельзя изменить после отправки заголовков
  • Извлечение информации из функций, которые иначе выдавали бы вывод, как это делает функция phpinfo()
  • Управление выводом стороннего кода путём изменения или включения его частей (например, извлечение данных, замена слов или фраз, добавление недостающих HTML-тегов), или полного отказа от этого кода при конкретных условиях, например при ошибках
  • Полифиллинг недоступной функциональности веб-сервера наподобие сжатия или кодирования вывода

Добавить

Примечания пользователей

Пользователи ещё не добавляли примечания для страницы
To Top