接続処理

PHP マニュアル
前のページ |  | 次のページ

# 第 20 章 接続処理

> 注意以下は、PHP 3.0.7 版以降に適用されます。

PHP 内部で、接続ステータスが保持されます。 これは、次の 3 つの状態をとりえます。

- 0 - NORMAL

- 1 - ABORTED

- 2 - TIMEOUT

通常 PHP が実行されている場合、NORMAL 状態がアクティブになります。 リモートクライアントが接続を切った場合、ABORTED 状態フラグが有効になります。 通常、リモートクライアントの接続断は、STOP ボタンを押すことにより発生します。 PHP 側の時間制限 (set_time_limit() 参照) にかかった場合、 TIMEOUT 状態フラグが有効になります。

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

スクリプトは、組み込みのスクリプトタイマーによっても終了することが できます。デフォルトのタイムアウトは、30 秒です。 これは、`php.ini`ディレクティブ max_execution_time または同義の Apache .confディレクティブ"php_value max_execution_time" を set_time_limit() 関数と同様に用いることにより 変更することが可能です。 タイマーが切れた時、スクリプトは中断されます。 上記のクライアントが接続を切るケースのように シャットダウン関数が登録されている場合、この関数がコールされます。 このシャットダウン関数の中では、 connection_timeout() 関数のコールにより タイムアウトがシャットダウン関数のコールを生じさせるかどうかを 確認することができます。 この関数は、タイムアウトによりシャットダウン関数がコールされた 場合に `TRUE` を返します。

もう一つ注意すべき点は、状態 ABORTED および TIMEOUT は同時にアクティブにできるということです。 これは、PHP をユーザーによる中断を無視するよう設定した場合に 可能です。 PHP は、ユーザーが接続を破棄しているが、スクリプトは 実行しつづけるということがある可能性があることに注意する 必要があります。 時間制限にかかって中断される場合、もしあればシャットダウン関数が コールされます。 ここで、connection_timeout() および connection_aborted() は `TRUE` を返します。 connection_status() を使用することにより、 一回のコールで両方の状態変数を確認できます。 この関数は、アクティブな状態変数のビットフィールドを返します。 例えば、状態変数が両方共アクティブな場合、3 を返します。

前のページ | ホーム | 次のページ
リモートファイルの使用 | 上に戻る | 持続的データベース接続