PHP スクリプトを使用してクライアントのブラウザが切断されたかどうかを確認するにはどうすればよいですか?
誰かが投稿しているのを見たことがあります:
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_valueignore_user_abort" 関数およびignore_user_abort() 関数によって制御できます。ユーザーの中断を無視するように PHP に指示しない場合、 register_shutdown_function() 経由でシャットダウン トリガー関数を設定しない限り、スクリプトは中断されます。このクローズ トリガー関数により、リモート ユーザーが [STOP] ボタンをクリックし、スクリプトがデータを再度出力しようとすると、PHP は接続が中断されたことを検出し、クローズ トリガー関数を呼び出します。
スクリプトは、組み込みのスクリプト タイマーによって中断される場合もあります。デフォルトのタイムアウト制限は 30 秒です。この値は、php.ini の max_execution_time を設定するか、Apache.conf 設定の対応する「php_value max_execution_time」パラメータを設定するか、set_time_limit() 関数を使用して変更できます。カウンタがタイムアウトすると、上記の接続中断状況と同様にスクリプトが終了し、事前に登録されたシャットダウン トリガー関数もこの時点で実行されます。そのシャットダウン トリガー関数内で、connection_status() 関数を呼び出すことで、タイムアウトによってシャットダウン トリガー関数が呼び出されたかどうかを確認できます。タイムアウトによりシャットダウントリガー関数が呼び出された場合、関数は 2 を返します。
注意すべき点の 1 つは、ABORTED 状態と TIMEOUT 状態が同時に有効になる可能性があるということです。これは、ユーザーの終了アクションを無視するように PHP に指示した場合に可能になります。 PHP はユーザーが切断されたことを認識しますが、スクリプトはまだ実行中です。実行時間制限に達すると、スクリプトは終了し、設定されたシャットダウン トリガー関数も実行されます。この時点で、関数 connection_status() が 3 を返すことがわかります。
しかし、私のテストの結果は、バックエンドがフロントエンドに出力しない場合、たとえば、while 処理の無限ループで、フロントエンドにコンテンツが出力されない場合、connection_status() は常に 0 になります。フロントエンドが壊れていることを知る方法はありません。
ディスカッションへの返信(解決策)
はい! php は、出力ステートメントの実行時にユーザー接続が有効かどうかのみチェックします
時間内に確認したい場合は、php のカーネルを変更する必要があります
しかし、そのコストが高すぎます

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。
