<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/features.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'ja',
  ),
  'this' => 
  array (
    0 => 'features.connection-handling.php',
    1 => '接続処理',
    2 => '接続処理',
  ),
  'up' => 
  array (
    0 => 'features.php',
    1 => '機能',
  ),
  'prev' => 
  array (
    0 => 'features.remote-files.php',
    1 => 'リモートファイルの使用',
  ),
  'next' => 
  array (
    0 => 'features.persistent-connections.php',
    1 => '持続的データベース接続',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ja',
    'path' => 'features/connection-handling.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="features.connection-handling" class="chapter">
  <h1 class="title">接続処理</h1>


  <p class="para">
  PHP 内部で、接続ステータスが保持されます。
  これは、次の 4 つの状態をとりえます。
   <ul class="itemizedlist">
    <li class="listitem"><span class="simpara">0 - NORMAL</span></li>
    <li class="listitem"><span class="simpara">1 - ABORTED</span></li>
    <li class="listitem"><span class="simpara">2 - TIMEOUT</span></li>
    <li class="listitem"><span class="simpara">3 - ABORTED および TIMEOUT</span></li>
   </ul>
  </p>

  <p class="simpara">
  通常 PHP が実行されている場合、NORMAL 状態がアクティブになります。
  リモートクライアントが接続を切った場合、ABORTED 状態フラグが有効になります。
  通常、リモートクライアントの接続断は、STOP ボタンを押すことにより発生します。
  PHP 側の時間制限 (<span class="function"><a href="function.set-time-limit.php" class="function">set_time_limit()</a></span> 参照) にかかった場合、
  TIMEOUT 状態フラグが有効になります。</p>

  <p class="simpara">
   スクリプトを終了させるためにクライアントとの接続を切断するかどうかを
   決めることが出来ます。
   時々、出力がどのリモートブラウザにも受信されない場合でも、
   常にスクリプトの実行完了まで実行する方が便利であることがあります。
   しかし、デフォルトの動作はリモートクライアントとの接続が断となった際にスクリプト
   の実行は破棄されます。
   この動作は、<var class="filename">php.ini</var> ディレクティブ ignore_user_abort にて 
   設定できます。
   同様に同じ意味を有する Apache <var class="filename">httpd.conf</var> ディレクティブ
   <code class="literal">php_value ignore_user_abort</code> または
   <span class="function"><a href="function.ignore-user-abort.php" class="function">ignore_user_abort()</a></span> 関数にて設定することも可能です。
   PHP にユーザーによる破棄を無視するように設定していない場合、
   ユーザーが破棄した場合、スクリプトの実行は終了します。
   一つの例外は、<span class="function"><a href="function.register-shutdown-function.php" class="function">register_shutdown_function()</a></span> を用いて
   シャットダウン関数を定義した場合です。
   シャットダウン関数を定義した場合、リモートユーザーが STOP ボタンを押した後、
   次にスクリプトが何か出力を行おうとした場合、PHP は接続が破棄されたことを検知し、
   シャットダウン関数がコールされます。
   このシャットダウン関数は、スクリプトが正常に終了した
   際にもコールされます。
   このため、クライアントが接続を切断した場合に別の動作をさせたい場合に
   は、<span class="function"><a href="function.connection-aborted.php" class="function">connection_aborted()</a></span> 関数を使用することが
   可能です。
   この関数は、接続が破棄された場合に、<strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> を返します。
  </p>

  <p class="simpara">
   スクリプトは、組み込みのスクリプトタイマーによっても終了することが
   できます。デフォルトのタイムアウトは、30 秒です。
   これは、<var class="filename">php.ini</var>ディレクティブ <strong class="option unknown">max_execution_time</strong>
   または同義の
   Apache <var class="filename">httpd.conf</var> ディレクティブ <code class="literal">php_value max_execution_time</code>
   を <span class="function"><a href="function.set-time-limit.php" class="function">set_time_limit()</a></span> 関数と同様に用いることにより
   変更することが可能です。タイマーが切れた時、スクリプトは中断されます。
   上記のクライアントが接続を切るケースのように
   シャットダウン関数が登録されている場合、この関数がコールされます。
   このシャットダウン関数の中では、
   <span class="function"><a href="function.connection-status.php" class="function">connection_status()</a></span> 関数のコールにより
   タイムアウトがシャットダウン関数のコールを生じさせるかどうかを
   確認することができます。
   この関数は、タイムアウトによりシャットダウン関数がコールされた
   場合に 2 を返します。
  </p>

  <p class="simpara">
   もう一つ注意すべき点は、状態 ABORTED および TIMEOUT
   は同時にアクティブにできるということです。
   これは、PHP をユーザーによる中断を無視するよう設定した場合に
   可能です。
   PHP は、ユーザーが接続を破棄しているが、スクリプトは
   実行しつづけるということがある可能性があることに注意する
   必要があります。
   時間制限にかかって中断される場合、もしあればシャットダウン関数が
   コールされます。
   ここで、<span class="function"><a href="function.connection-status.php" class="function">connection_status()</a></span> は 3 を返します。
  </p>

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