<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/book.outcontrol.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'ru',
  ),
  'this' => 
  array (
    0 => 'outcontrol.output-buffering.php',
    1 => 'Буферизация вывода',
    2 => 'Буферизация вывода',
  ),
  'up' => 
  array (
    0 => 'book.outcontrol.php',
    1 => 'Контроль вывода',
  ),
  'prev' => 
  array (
    0 => 'outcontrol.constants.php',
    1 => 'Предопределённые константы',
  ),
  'next' => 
  array (
    0 => 'outcontrol.flushing-system-buffers.php',
    1 => 'Сброс (отправка) системных буферов',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ru',
    'path' => 'reference/outcontrol/output-buffering.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="outcontrol.output-buffering" class="chapter">
 <h1 class="title">Буферизация вывода</h1>

 <p class="para">
  Буферизация вывода — временное хранение вывода
  перед сбросом, перед отправкой и удалением, в браузер в веб-контексте
  или в командную оболочку в контексте командной строки.
  Пока буферизация вывода активна, вывод из скрипта не отправляется,
  вместо этого вывод сохраняется во внутреннем буфере.
 </p>

 <div class="section">
  <h2 class="title">Буферизация, которая влияет на PHP</h2>
  <p class="para">
   PHP опирается на базовую программно-аппаратную инфраструктуру
   при сбросе вывода.
   Буферизация, которую реализуют консоли в командной строке (например, с буферизацией строк)
   или веб-серверами и браузером в веб-контексте (например, с полной буферизацией),
   влияет на то, когда вывод отображается конечному пользователю.
   Часть этих эффектов получится устранить тонкой настройкой параметров сервера
   и (или) выравниванием размеров буферов на разных уровнях.
  </p>
 </div>

 <div class="section">
  <h2 class="title">Контроль буферизации вывода в PHP</h2>
  <p class="para">
   Разработчики PHP предусмотрели полностью буферизованный пользовательский буфер вывода
   с функциями для запуска, манипулирования и отключения буфера
   (бо́льшая часть <a href="ref.outcontrol.php" class="link">ob_<span class="replaceable">*</span></a>-функций),
   и две функции для сброса базовых системных буферов
   (функции <span class="function"><a href="function.flush.php" class="function">flush()</a></span> и <span class="function"><a href="function.ob-implicit-flush.php" class="function">ob_implicit_flush()</a></span>).
   Часть этой функциональности также устанавливают и (или) конфигурируют
   в настройках файла <var class="filename">php.ini</var>.
  </p>
 </div>

 <div class="section">
  <h2 class="title">Когда полезна буферизация</h2>
  <p class="para">
   Буферизация вывода полезна в ситуациях, в которых буферизованный вывод
   изменяется или проверяется, или его переиспользуют в запросе;
   или когда требуется контролируемая очистка выходных данных.
   Конкретные сценарии работы с буферами включают:
   <ul class="itemizedlist">
    <li class="listitem">
     <span class="simpara">
      Кеширование результатов выполнения скриптов, которые требуют сложных вычислений или времени,
      например при генерации статических <code class="literal">HTML</code>-страниц
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Переиспользование сгенерированного вывода путём его отображения, сохранения в файл
      и (или) отправки по электронной почте
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Сброс элемента <code class="literal">head</code> — заголовка <code class="literal">HTML</code>-страницы —
      до отправки элемента <code class="literal">body</code> — тела страницы, чтобы разрешить браузерам
      загружать внешние ресурсы, пока скрипт получает доступ к базе данных или файлу,
      устанавливает внешнее сетевое соединение или решает другие трудоёмкие задачи.
      Это полезно только тогда, когда <code class="literal">HTTP</code>-код состояния
      нельзя изменить после отправки заголовков
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Извлечение информации из функций, которые иначе выдавали бы вывод,
      как это делает функция <span class="function"><a href="function.phpinfo.php" class="function">phpinfo()</a></span>
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Управление выводом стороннего кода путём изменения или включения его частей
      (например, извлечение данных, замена слов или фраз,
      добавление недостающих <code class="literal">HTML</code>-тегов),
      или полного отказа от этого кода при конкретных условиях, например при ошибках
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Полифиллинг недоступной функциональности веб-сервера
      наподобие сжатия или кодирования вывода
     </span>
    </li>
   </ul>
  </p>
 </div>

</div>
<?php manual_footer($setup); ?>