<?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 => 'zh',
  ),
  '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' => 'zh',
    '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">
  输出缓冲是在将输出冲刷（发送和丢弃）到浏览器（在 Web 上下文中）或
  shell（在命令行上）之前对输出进行缓冲（临时存储）。当输出缓冲处于活动状态时，脚本不会发送任何输出，而是将输出存储在内部缓冲区中。
 </p>

 <div class="section">
  <h2 class="title">缓冲影响 PHP</h2>
  <p class="para">
   PHP 在冲刷输出时依赖底层软件/硬件基础设施。由命令行上（例如行缓冲）的控制台或 Web 上下文中的 Web
   服务器和浏览器（例如完全缓冲）实现的缓冲确实会影响向终端用户显示输出的时间。其中一些影响可以通过微调服务器设置和/或调整各层的缓冲区大小来排除。
  </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">HTML</code> 页面的 <code class="literal">head</code> 与 <code class="literal">body</code>
      分开冲刷，允许浏览器在脚本执行潜在的更耗时的任务（例如数据库/文件访问、外部网络连接）时加载外部资源。这只有在发送
      header 后 <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">
      填充某些不可用的 Web 服务器功能（例如压缩或编码输出）
     </span>
    </li>
   </ul>
  </p>
 </div>

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