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

3 ноября 2014 г. Просмотров: 1042 Инструкции
В процессе работы php-скрипты могут выводить результаты по мере выполнения заложенного в них сценария либо накапливать данные, дожидаясь полного выполнения сценария и завершения работы скрипта. Выбор одного из этих вариантов зависит от значения, присвоенного в настройках интерпретатора php переменной, отвечающей за буферизацию вывода данных. Изменить его можно несколькими способами.

Инструкция

  • Если отключить буферизацию вывода нужно для всех выполняемых на сервере или на сайте php-скриптов, правильнее всего сделать это через файл php.ini. При запуске каждого скрипта интерпретатор языка php читает настройки из этого файла конфигурации, поэтому поместить в него директиву отключения буферизации вывода результатов работы скриптов - наиболее оптимальное решение. Откройте файл в любом текстовом редакторе и с помощью диалога поиска найдите директиву с названием output_buffering. Ее значением может быть как целочисленная, так и логическая (On или Off) переменная, поэтому вместо присвоенного по умолчанию значения впишите Off или 0. Если этой директивы нет в конфигурационном файле, добавьте в конец записей дополнительную строку:output_buffering = Off
  • При необходимости отменить буферизацию вывода для скриптов отдельной папки или группы вложенных папок, лучше сделать это через файл htaccess. Найдите его в нужном каталоге и откройте в текстовом редакторе. Если такого файла еще нет, создайте новый. Директива, которую следует добавить, аналогична описанной в предыдущем шаге, но перед ней надо поместить отметку о том, что речь идет об одной из настроек php. Полностью эта строка должна выглядеть так:php_flag output_buffering offСозданный файл htaccess поместите в верхнюю папку иерархии каталогов, для которых должна выполняться директива.
  • Чтобы отключить буферизацию в одном отдельно взятом php-скрипте, используйте одну из встроенных функций этого языка. ob_get_flush() возвращает текущее содержимое буфера, затем обнуляет его и отключает буферизацию вывода. ob_end_flush() делает то же самое, но текущее содержимое буфера не возвращает в вызвавшую ее переменную, а отправляет на устройство вывода. Функция ob_end_clean() просто стирает текущие данные перед отключением буферизации. Воспользовавшись одной из этих функций, не забудьте снова включить буферизацию - для этого предназначена функция ob_start().
  • Совет добавлен 24 сентября 2011 Совет 2: Как отключить буферизацию Иногда для вывода web-страницы используется буферизация, позволяющая минимизировать число попыток вывести HTML или данные из кода на ASP-страницах в клиентском браузере и увеличить тем самым общую производительность. TCP/IP сконструирован таким образом, что клиенту отправлять данные эффективнее большими блоками.

    Вам понадобится

    • -HTML-редактор.

    Инструкция

  • Страница становится более медленной из-за буферизации — от того, что отправляется пользователям только после окончательного формирования. Поэтому для станиц, которые генерируются скриптами очень долго, можно отключать буферизацию либо полностью, либо частично.
  • Используйте команду Response.Buffer = False для полного отключения буферизации. Этот метод позволит высылать данные пользователю сразу.
  • Используйте метод Response.Flush. Для частичного отключения буферизации понадобится более сложный алгоритм действий, однако она представляется более предпочтительной. Для нее используется метод Response.Flush, которым клиенту отправляется весь HTML, накопившийся в буфере.
  • К примеру, после сгенерированной первой сотни строк таблицы, имеющей общий размер в тысячу строк, ASP-скриптыы вызывают Response.Flush для того, чтобы отправить первую порцию страницы клиентскому браузеру. Такой подход позволяет пользователю видеть эту первую сотню строк еще до тех пор, как будет готова вся таблица. Более того, есть возможность и дальше в ходе генерирования новой строки отправить ее клиенту такими же частями.
  • Подобная работа с буфером является наиболее оптимальной, ей достигается ощутимый прирост уровня производительности и возможность загружать рассчитываемые в течение длительного срока страницы поэтапно, не принуждая посетителей ресурса к долгому ожиданию загрузки перед чистым окном браузера.
  • Разбейте страницу на составные элементы. Важно помнить, что некоторыми браузерами не поддерживается отображение частей таблицы — они будут ждать ее закрытия. В таком случае нужно имитировать такое закрытие — например, объемную таблицу можно разбить по сто строк, как описано выше. В таком случае после того, как будет сгенерирована очередная суб-таблица, ее можно отправлять пользователям при помощи метода Response.Flush.
  • Примените метод Flush. В некоторых случаях возможна ситуация, когда технология частичного отключения буферизации расходует высокие объемы памяти сервера в зоне генерирования очень обширных страниц. Без использования метода Flush не удастся обеспечить верное использование этой технологии и избежать нежелательного перерасхода системного ресурса. Недостатком метода является тот факт, что для верного изображения у пользователя таблицы на экране необходимо обеспечивать создание столбцов одинаковой ширины в каждой из суб-таблиц.
  • Обратите внимание Многие браузеры не отображают участок таблицы без тега TABLE. Как отключить буферизацию - версия для печати

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