connection_status

関数の概要

connection_status は、PHPの組み込み関数で、スクリプト実行中のクライアントからの接続状態を取得するために使用されます。主にウェブサーバーとクライアント間の通信がまだ維持されているかどうかを確認したい場合に役立ちます。例えば、長時間処理を行うスクリプトで、ユーザーが途中でページを離れたかを検知する際に利用されます。

パラメータの説明

  • connection_status() はパラメータを取りません。

戻り値

接続状態を示す整数値を返します。返される値は以下の通りです。

  • 0 (CONNECTION_NORMAL): 通常状態。クライアントとの接続が正常に維持されています。
  • 1 (CONNECTION_ABORTED): クライアント側で接続が中断されました(ユーザーがブラウザを閉じた等)。
  • 2 (CONNECTION_TIMEOUT): 接続がタイムアウトしました。

使用例

基本的な使い方

<?php
if (connection_status() === CONNECTION_NORMAL) {
    echo "接続は正常です。処理を続行します。";
} else {
    echo "接続が切断されました。処理を中断します。";
}
?>

この例では、接続状態が正常かどうかを確認し、正常であれば処理を続けます。そうでなければ中断を示すメッセージを表示します。

長時間処理の中で接続をチェック

<?php
for ($i = 0; $i < 10; $i++) {
    // 途中で接続が切れたかチェック
    if (connection_status() !== CONNECTION_NORMAL) {
        error_log("クライアント接続が中断されたため処理を中断します。");
        break;
    }
    // 重い処理のシミュレーション
    sleep(1);
    echo "処理中...<br>";
}
?>

長時間の処理ループの中で毎回接続状態をチェックし、接続が切れていたら処理を中断しています。

ユーザー通知を伴う例

<?php
ignore_user_abort(false); // クライアント切断時にスクリプトも停止

echo "処理開始しました。<br>";
flush();

while (true) {
    if (connection_status() !== CONNECTION_NORMAL) {
        echo "接続が切断されたため処理を停止します。";
        break;
    }
    // 処理内容...
    sleep(2);
    echo "まだ接続中です。<br>";
    flush();
}
?>

ignore_user_abort(false) によって、ユーザーがブラウザを閉じた場合にスクリプトも停止する設定にしています。ループ内で接続状態を検知し、切断があればメッセージを出して処理を止めます。

関連する関数

  • connection_aborted(): 接続が中断されたかどうかを判定する関数。
  • connection_status(): ここで解説している関数。
  • ignore_user_abort(): ユーザーが接続を切断した際にスクリプトの実行を継続するか設定する関数。

まとめ

connection_status はPHPでクライアントの接続状態を知るために便利な関数です。特に長時間処理やリアルタイム性が求められるスクリプトで効果を発揮します。接続が切断された場合には処理を中断する等の制御に使い、リソースの無駄遣いを抑えることができます。関連する関数と組み合わせて使うことで、より柔軟な接続管理が可能になります。