<?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 => 'ja',
  ),
  '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' => 'ja',
    '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 の場合) や
  シェル(コマンドラインの場合) に出力をフラッシュ(送信して破棄)する前に、
  バッファリング(一時的に保存) することです。
  出力バッファリングが有効な間は、スクリプトから出力は送信されず、
  代わりに内部バッファに保存されます。
 </p>

 <div class="section">
  <h2 class="title">PHPに影響するバッファリング</h2>
  <p class="para">
   PHP は、出力をフラッシュする際に、
   基礎となる ソフトウェア/ハードウェア のインフラストラクチャに依存します。
   コマンドライン上のコンソールで実装されているバッファリング
   (例: 行バッファリング(訳注: 改行されるごとにフラッシュされる))
   や 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> とは別にフラッシュすることで、
      ブラウザは時間のかかる可能性のある処理
      (例: データベース/ファイルへのアクセス、外部ネットワーク接続)
      をスクリプトが実行している間に、外部リソースを読み込むことができます。
      これは、<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); ?>