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