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

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

Старт! Честный VDS/VPS, на котором «Лунная База» живет уже 20+ лет

Задумываетесь о том, чтобы поднять свой pet-проект, сайт клиента или настроить окружение для разработки? Уже пора подумать, где арендовать железо.

Лунная База хостится на FirstVDS более 20 лет. Мыслей о том, чтобы перебраться на другой хостинг, не было ни разу (хотя опыт работы с другими вариантами, конечно, есть).

Бывали разные ситуации, но они бывают на любом железе. Главное, что нужно понять: здесь нет маркетинговой шелухи и сказок про «мы всё сделаем за вас». Если вы берете VDS — вам дают полный root, возможность накатить любую ОС и не лезут в ваши конфиги.

Если в саппорт написать с вопросом по вашему коду и получить ответ: «Читайте документацию и разбирайтесь сами» или «Обратитесь к профильному специалисту» — это не повод обижаться. Это повод углубить свои знания в DevOps и сайтостроении! Бегите от тех, кто пообещает: «Мы всё чиним и настраиваем абсолютно бесплатно!». Никто никогда не работает «по доброте душевной» в ущерб себе, а бесплатный сыр в администрировании обычно заканчивается сломанной базой данных.

Что по факту: Гибкое масштабирование ядер и RAM, экономия по сравнению с физическими серверами и адекватная панель ispmanager, если она вам нужна.



Предупреждение 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 на сервере, но как это отразится на работе скриптов и скорости ответа сервера — вопрос не имеющий однозначно правильного ответа, и в каждом отдельном случае кода программы, это может сыграть как в сторону увеличения быстродействия, так и в сторону непредусмотренных ошибок (при включении буферизации, которая может повлечь накопление быстро устаревающих данных или данных, последовательность попадания в буфер является критичной).

Самый честный хостинг за 20+ лет существования Лунной Базы

Задумываешься о том, чтобы поднять свой сайт в Интернете? Уже пора подумать о том, какой хостинг выбрать?

Лунная База хостится 20+ лет на firstDVS. При этом, мыслей о том, чтобы перебраться на другой хостинг не было. (Но, при этом есть опыт работы с другими вариантами.)

Бывали с firstDVS разные ситуации, но, они бывают на всех хостингах. Единственное, что тут важно понять, - это то, что никто ничего тебе не будет впаривать... Но, и работать за тебя тоже никто не станет. Если в саппорт ответили: «Читайте по ссылке и разбирайтесь сами...» или вообще «Обратитесь за помощью к специалисту», - это повод углубить свои знания в области сайтостроения, а не бежать к тем, что пообещают: «Мы всё чиним и всё делаем за своих клиентов абсолютно бесплатно!» Никто никогда ничего ни за кого "по доброте душевной" не делал, не делает и не будет делать!

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