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

Что такое буферизация вывода и почему она используется в 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

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

буферизация вывода с помощью 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