Как выключить буферизацию вывода php на сервере

При работе с прикладным программированием на php для WEB стоит задача не просто обработать какие данные и выдать результат в браузер пользователю, но и по возможностью сделать это максимально быстро и компактно. В этой статье рассмотрим то, как отключить буферизацию вывода php на сервере, если она включена, а для работы скриптов требуется, чтобы она была отключена.



Предупреждение Joomla о включенной буферизации вывода

При установке Joomla 3 на сервер можно заметить не полное совпадение с рекомендациями разработчиков с теми настройками, которые осуществлены на сервере:

Предупреждение Joomla о включенной буферизации вывода

Joomla 4 устанавливается с меньшим количеством информации, но и в итоге ругается в админке после установки на то, что буферизация php включена.

Буферизация вывода php: хорошо это или плохо?

Перед тем, как отключить буферизацию вывода php хорошо бы разобраться, хорошо это или плохо, вне зависимости от рекомендаций разработчиков тех или иных CMS'ок. Эти разработчики перестраховываются, рекомендуя то, что 100% обеспечит правильное исполнение их программ, а также того, что будет навешено поверх их стандартного функционала сторонними разработчиками в виде плагинов, модулей и прочих расширений.

Что же такое буферизация вывода php, на что и как она влияет?

При исполнении программы на php генерируются какие данные, которые отправляются в поток стандартного вывода. Это могут быть функции или команды типа echo или print. Если буфера вывода нет, то они сразу передаются на то устройство, которое используется в качестве стандартного устройства вывода. В нашем случае — это выходной порт сервера для передачи ответа на запрос пользователя. Если буферизация вывода включена, то генерируемые данные сперва попадают в промежуточное пространство, где могут накапливаться до того, как быть переданными.

И тут в действие вступает ещё один механизм, используемый при передачи данных по сети — сжатие данных. Если данные не накапливаются, то и сжимать собственно нечего — что прилетело на выходной порт сервера, то и должно быть отправлено. А вот если данные сперва были накоплены в буфер вывода, то их можно предварительно сжать и только после этого отправить.

На самом деле, всё гораздо сложнее, и сервер имеет собственный буфер, который перед отправкой может быть обработан архиватором. А в буфер php может попадать быстро устаревающая информация, которую нужно срочно передать. Так что даже при отключенной буферизации данных вывода, есть шанс получить компактный пакет данных при ответе сервера. А при включенной буферизации вывода, принудительно отдать команду отправить данные из буфера (вне зависимости его наполненности).

Именно поэтому, нет готового ответа на вопрос о том, нужно ли включать или выключить буферизацию вывода php. Но это можно сделать в настройках сервера.

Как отключить буферизацию вывода php на сервере в настройках php.ini

В официальной документации php написано, что по умолчанию буферизация вывода отключена. Однако, по каким-либо причинам она может оказаться включенной. Для того, чтобы её отключить, имея доступ к файлу с настройками php.ini нужно найти строку с output_buffering, если она есть и/или прописать:

output_buffering 0

Более тонкие настройки буферизации:

Вы можете разрешить буферизацию вывода для всех файлов, установив эту директиву в 'On'. Если вы хотите ограничить размер буфера до определенного размера, вы можете установить не 'On', а максимальное количество байт в этой директиве (например, output_buffering=4096). Эта директива всегда отключена в PHP-CLI.

Как отключить буферизацию вывода php на сервере через .htaccess

Если вы пользуетесь сервером Apache и в настройках php разрешено использование директив настроек из файла .htaccess, то вам повезло! Для управления буферизацией вывода php достаточно добавить в этот файл строчку:

php_value output_buffering 0

Выводы

Таким образом, можно отключить буферизацию вывода php на сервере, но как это отразится на работе скриптов и скорости ответа сервера — вопрос не имеющий однозначно правильного ответа, и в каждом отдельном случае кода программы, это может сыграть как в сторону увеличения быстродействия, так и в сторону непредусмотренных ошибок (при включении буферизации, которая может повлечь накопление быстро устаревающих данных или данных, последовательность попадания в буфер является критичной).

Заберите ссылку на статью к себе, чтобы потом легко её найти!
Раз уж досюда дочитали, то может может есть желание рассказать об этом месте своим друзьям, знакомым и просто мимо проходящим?
Не надо себя сдерживать! ;)

Старт! Горячий старт на просторы интернета
Старт! Горячий старт на просторы интернета
Старт! Меню