Что такое буферизация вывода?
Что такое буферизация вывода и почему она используется в PHP?
5 answers
Буферизация вывода для веб-разработчиков, руководство для начинающих:
Без буферизации вывода (по умолчанию) ваш HTML-код отправляется в браузер по частям по мере того, как PHP обрабатывает ваш скрипт. С буферизацией вывода ваш HTML-код сохраняется в переменной и отправляется в браузер как единое целое в конце вашего скрипта.
Преимущества буферизации вывода для веб-разработчиков
- Включение буферизации вывода само по себе уменьшает время, затрачиваемое на требуется загрузить и отобразить наш HTML-код, потому что он не отправляется в браузер по частям, поскольку PHP обрабатывает HTML.
- Все причудливые вещи, которые мы можем делать со строками PHP, теперь мы можем делать со всей нашей HTML-страницей в виде одной переменной.
- Если вы когда-либо сталкивались с сообщением "Предупреждение: Невозможно изменить информацию заголовка - заголовки уже отправлены (вывод)" при настройке файлов cookie, вы будете рады узнать, что буферизация вывода - это ваш ответ.
Буферизация вывода используется 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 );
}
?>
Функции управления выводом позволяют вам контролировать , когда вывод отправляется с сценарий. Это может быть полезно в нескольких различных ситуациях, особенно если вам нужно отправить заголовки в браузер после того, как ваш скрипт начал выводить данные. Вывод Функции управления не влияют на заголовки, отправляемые с помощью header() или setcookie(), только такие функции, как echo() и данные между блоками PHP код.
Http://php.net/manual/en/book.outcontrol.php
Больше Ресурсов:
Как следует из названия, здесь используется буфер памяти, используемый для управления отображением вывода скрипта.
Вот один очень хороший учебник по теме
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