Php output buffering disabled

How to enable and disable the PHP output_buffering directive

This article describes how to enable and disable the output_buffering directive in a custom php.ini file.

The information in this article only applies to certain types of hosting accounts. To determine whether or not the information below applies to your account, please see this article.

This article assumes that you have already set up a custom php.ini file on your web site. If you have not already set up a custom php.ini file, please read this article first.

Using the output_buffering directive

By default, when PHP processes a script, it sends output to the client in multiple chunks until script processing is complete. You can change this behavior and set PHP to buffer output during script processing instead.

When output buffering is enabled, PHP sends all of the output to the client only after script processing is complete. There are two main reasons why you may want to do this:

  • Output buffering enables you to send headers to the client after PHP has started processing a script.
  • Output buffering may improve site performance.

To enable output buffering, use a text editor to modify the output_buffering directive in the php.ini file as follows:

Alternatively, to enable output buffering and limit the buffer to a specific size, use a numeric value instead of on. For example, to set the maximum size of the output buffer to 16384 bytes, modify the output_buffering directive in the php.ini file as follows:

To disable output buffering, modify the output_buffering directive in the php.ini file as follows :

To verify the current value of the output_buffering directive and other directives, you can use the phpinfo() function. For more information about how to do this, please see this article.

More Information

  • To view a complete list of php.ini directives, please visit http://www.php.net/manual/en/ini.list.php.
  • For more information about the output_buffering directive, please visit http://php.net/manual/en/outcontrol.configuration.php.

Article Details

Источник

Php output buffering disabled

Поведение этих функций зависит от установок в php.ini .

Конфигурационные опции управления выводом

Имя По умолчанию Место изменения Список изменений
output_buffering «0» PHP_INI_PERDIR
output_handler NULL PHP_INI_PERDIR
implicit_flush «0» PHP_INI_ALL
url_rewriter.tags «a=href,area=href,frame=src,form=,fieldset=» PHP_INI_ALL До PHP 7.1.0 использовалась для установки перезаписи сессии «trans sid». С PHP 7.1.0 используется только output_add_rewrite_var() .
url_rewriter.hosts $_SERVER[‘HTTP_HOST’] используется по умолчанию. PHP_INI_ALL Доступно с PHP 7.1.0
Читайте также:  Python строим график функции

Для подробного описания констант PHP_INI_*, обратитесь к разделу Где могут быть установлены параметры конфигурации.

Краткое разъяснение конфигурационных директив.

output_buffering bool / integer

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

Вы можете перенаправить весь вывод вашего скрипта в функцию. Для примера, если вы установите output_handler в mb_output_handler() , то кодировка символов прозрачно преобразуется в соответствии с указанной кодировкой. Настройка любого обработчика вывода автоматически включает буферизацию вывода.

Замечание:

Только встроенные функции могут использоваться с этой директивой. Для функции, определённой пользователем, используйте ob_start() .

false по умолчанию. Изменение значения на true указывает PHP не сохранять данные в буфер, а после каждого отправленного блока автоматически отправлять данные в выходной слой. Это эквивалентно вызову PHP-функции flush() после каждого вызова print или echo для каждого HTML -блока.

При использовании PHP в веб-среде, включение этой опции приведёт к серьёзной потере производительности, поэтому рекомендуется использовать её только для отладки. Это значение по умолчанию имеет true при работе в CLI SAPI .

url_rewriter.tags string url_rewriter.tags определяет, какие HTML-теги будут перезаписаны значениями output_add_rewrite_var() . По умолчанию a=href,area=href,frame=src,input=src,form= form является специальным тегом. добавляется как переменная формы.

Замечание: До PHP 7.1.0 надо было использовать url_rewriter.tags для указания session.trans_sid_tags. Начиная с PHP 7.1.0, fieldset больше не рассматривается как специальный тег.

url_rewriter.hosts string url_rewriter.hosts указывает, какие хосты перезаписываются для включения значений output_add_rewrite_var() . По умолчанию используется $_SERVER[‘HTTP_HOST’] . Несколько хостов можно указать перечислив их через запятую, между хостами не должно быть пробелов. То есть php.net,wiki.php.net,bugs.php.net

Источник

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

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

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

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

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

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

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

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

Читайте также:  Javascript include script in html

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

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

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

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

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

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

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

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

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

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

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

php_value output_buffering 0

Выводы

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

Читайте также:  Rest api python django пример

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

Источник

How to Enable and Disable PHP output buffering

Globedrill

How to Enable and Disable PHP output buffering on Linux server

PHP output_buffering is used to keep some data in memory instead of sending it to web browser.

Output is stored in memory for some time and it is sent to the web browser when the script execution is completed.

How to Enable PHP output_buffering

1. Log into your Linux server as ‘root’ user or login as any user with sudo privileges

2. Find the path of php.ini by running the command ‘php —ini’

Find and edit php.ini

3. Open php.ini using vi editor and change ‘output_buffering = On’ in php.ini file

How to Enable PHP output_buffering

How to Enable PHP output_buffering

4. Save the php.ini file and exit

6. Create phpinfo page to verify output_buffering is enabled

phpinfo - output_buffering enabled

phpinfo – output_buffering enabled

‘output_buffering = 1’ means output_buffering is enabled and buffer is unlimited (Use with caution)

You can set custom value for output_buffering. Example : ‘output_buffering = 4096’

How to set custom value for output_buffering

How to set custom value for output_buffering

How to Disable PHP output_buffering

1. Log into you Linux server as ‘root’ user

2. Run the command ‘php —ini’ to find the loaded configuration file

3. Change the line to ‘output_buffering = Off’ in php.ini file

Change the line ‘output_buffering = On’ to ‘output_buffering = Off’

4. Save the php.ini file and exit

5. Restart the webserver for changes to take effect

6. Create phpinfo file to verify output_buffering is disabled

‘output_buffering = 0’ means output_buffering is disabled.

How to check whether PHP output_buffering is enabled or disabled

1. Log into your Linux server as ‘root’ or sudo user

2. Run the command ‘php —ini’ to find the PHP configuration file

3. Grep ‘output_buffering’ in PHP configuration file

[root@server /]# grep output_buffering /etc/php.ini
; output_buffering
output_buffering = 4096
; performance, enable output_buffering in addition.

4. You can also check output_buffering by creating phpinfo page in site document root

output_buffering is enabled on the above linux server.

Источник

Оцените статью