Что такое буферизация вывода?


Что такое буферизация вывода и почему она используется в PHP?

Author: Trilarion, 2010-05-14

5 answers

Буферизация вывода для веб-разработчиков, руководство для начинающих:

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

Преимущества буферизации вывода для веб-разработчиков

  • Включение буферизации вывода само по себе уменьшает время, затрачиваемое на требуется загрузить и отобразить наш HTML-код, потому что он не отправляется в браузер по частям, поскольку PHP обрабатывает HTML.
  • Все причудливые вещи, которые мы можем делать со строками PHP, теперь мы можем делать со всей нашей HTML-страницей в виде одной переменной.
  • Если вы когда-либо сталкивались с сообщением "Предупреждение: Невозможно изменить информацию заголовка - заголовки уже отправлены (вывод)" при настройке файлов cookie, вы будете рады узнать, что буферизация вывода - это ваш ответ.
 235
Author: ax., 2012-11-19 00:44:42

Буферизация вывода используется PHP для повышения производительности и выполнения нескольких трюков.

  • Вы можете заставить PHP хранить все выходные данные в буфере и выводить их все сразу, повышая производительность сети.

  • В определенных ситуациях вы можете получить доступ к содержимому буфера, не отправляя его обратно в браузер.

Рассмотрим этот пример:

<?php
    ob_start( );
    phpinfo( );
    $output = ob_get_clean( );
?>

В приведенном выше примере вывод записывается в переменную вместо отправки ее в браузер. по умолчанию функция output_buffering отключена.

  • Вы можете использовать буферизацию вывода в ситуациях, когда хотите изменить заголовки после отправки содержимого.

Рассмотрим этот пример:

<?php
    ob_start( );
    echo "Hello World";
    if ( $some_error )
    {
        header( "Location: error.php" );
        exit( 0 );
    }
?>
 54
Author: Salman A, 2011-07-15 06:39:34

Функции управления выводом позволяют вам контролировать , когда вывод отправляется с сценарий. Это может быть полезно в нескольких различных ситуациях, особенно если вам нужно отправить заголовки в браузер после того, как ваш скрипт начал выводить данные. Вывод Функции управления не влияют на заголовки, отправляемые с помощью header() или setcookie(), только такие функции, как echo() и данные между блоками PHP код.

Http://php.net/manual/en/book.outcontrol.php

Больше Ресурсов:

Буферизация Вывода С Помощью PHP

 9
Author: Sarfraz, 2010-05-14 06:14:06

Как следует из названия, здесь используется буфер памяти, используемый для управления отображением вывода скрипта.

Вот один очень хороший учебник по теме

 4
Author: nik, 2010-05-14 06:19:58
ob_start();  // turns on output buffering
$foo->bar();  // all output goes only to buffer
ob_clean();  // delete the contents of the buffer, but remains buffering active
$foo->render(); // output goes to buffer
ob_flush(); // send buffer output
$none = ob_get_contents();  // buffer content is now an empty string
ob_end_clean();  // turn off output buffering

Буферы могут быть вложенными, поэтому, пока один буфер активен, другой ob_start() активирует новый буфер. Таким образом, ob_end_flush() и ob_flush() на самом деле отправляют буфер не на вывод, а в родительский буфер. И только когда родительского буфера нет, содержимое отправляется в браузер или терминал.

Хорошо объяснено здесь: https://phpfashion.com/everything-about-output-buffering-in-php

 0
Author: sudip, 2018-08-23 07:20:55