connection_aborted

関数の概要

connection_aborted は、PHPスクリプト実行中にクライアント側からの接続が中断されたかどうかを確認するための関数です。例えば、ユーザーがブラウザを閉じたり、ネットワークの問題で通信が切断された場合に1を返し、それ以外は0を返します。この関数を使うことで、サーバー側で無駄な処理を防ぐといった制御が可能になります。

パラメータの説明

  • なし – この関数は引数を取りません。

戻り値

クライアントの接続状態によって以下の値を返します。

  • 1:クライアントの接続が中断されている
  • 0:クライアントの接続はまだ生きている

使用例

基本的な使い方

<?php
if (connection_aborted()) {
    echo "接続が中断されました。処理を中止します。";
    exit;
}
echo "接続は維持されています。処理を続けます。";
?>

この例では、connection_aborted() が1を返した場合に処理を中止しています。接続が生きていればメッセージを出力し続けます。

長時間処理中の確認

<?php
for ($i = 0; $i < 10; $i++) {
    sleep(1); // 重い処理の代わり

    if (connection_aborted()) {
        error_log("クライアントが切断されたためループ終了");
        break;
    }
    echo "処理ステップ $i 完了<br>";
    flush();
}
?>

長時間かかる処理のループの中で接続状態をチェックし、切断されていたら無駄な処理を中断します。

ログ記録と連携した例

<?php
register_shutdown_function(function() {
    if (connection_aborted()) {
        error_log("ユーザーの接続が途中で切断されました。");
    } else {
        error_log("リクエスト完了");
    }
});

// 大きなファイルの送信や計算処理等
// ここに処理を記述
?>

シャットダウン関数と組み合わせて使うことで、処理の最後に接続状況をログに残せます。

関連する関数

  • connection_status() – 現在の接続状態を取得する関数
  • connection_reset() – こちらは存在しませんが、接続制御の理解には関連
  • ignore_user_abort() – ユーザーが切断しても処理を続行させるかを設定する関数

まとめ

connection_aborted() は、PHPスクリプトがクライアントの接続状態を把握し、適切に処理の中断や継続を制御するのに便利な関数です。特に長時間処理や大きなファイル送信時に役立ちます。初心者にも使いやすく、無駄なリソース消費を抑えるための重要なツールなので、実務でも積極的に活用しましょう。