ホームページ バックエンド開発 PHPチュートリアル PHP 非同期子バックグラウンド呼び出し継続実行切断/ブラウザ

PHP 非同期子バックグラウンド呼び出し継続実行切断/ブラウザ

Jun 13, 2016 pm 01:02 PM
http ignore php user

PHP 非同期呼び出し バックグラウンド呼び出し 継続実行 切断/ブラウザ

タイトルが変なのは、以下の部分を短い文でどう要約すればいいのか分からないからです。 PHP 開発者が検索エンジンを通じてこの入門書をもっと簡単に見つけられることを願っています。

今回の中心的な内容は、ignore_user_abort 関数を中心に展開します。

Web 開発を行う人なら誰でも、ブラウザとサーバー間の接続と通信が HTTP プロトコルを介して行われることを知っています。これは、リクエストとレスポンスのモデルに基づいたプロトコルです。 URL経由のブラウザ 特定のサーバーに対してリクエスト (Request) を開始し、Web サーバーはリクエストを受信して​​プログラムを実行し、HTTP に準拠した文字列で応答します (Response)。 プロトコルの形式には、HEAD と BODY の 2 つの部分があります。

ウェブさん、問題がありますか? サーバーがプログラムを実行する場合、数ミリ秒で完了する場合もあれば、数分以内に完了しない場合もあります。プログラムの実行が遅い場合、ユーザーはそれ以上待つ忍耐力がなくなり、ブラウザを閉じる可能性があります。このとき、サーバーは接続ステータスの変更の通知を受け取ります。 HTTP? は最上位のプロトコルであり、その下に TCP プロトコルの層があり、接続が中断されたことを認識します。接続が切断されると、サーバー側プログラムはすぐに実行を停止します。

ここで問題の核心に入ります。サーバー側プログラムは実行をすぐに停止します。このプログラムが情報を読み取るだけであれば問題ありませんが、停止すると情報は読み取られなくなります。書かれたプログラムの場合はどうなるでしょうか?たとえば、ユーザーがテキストを送信する場合、サーバーの設計はより複雑になり、テーブルの 1 つが別のプロセスによってロックされているなどの理由により、複数のテーブルを同時に更新する必要がある可能性があります。 、この時点で、ユーザーが閲覧デバイスを閉じると、プログラムは待機せずに直接終了します。その結果、この情報は不完全に保存されます。

具体的な例を挙げると、ユーザーが送信したテキストを 4 つのテーブル A、B、C、D に書き込む必要があります。2 つのテーブル A と B への書き込みは 0.1 ミリ秒で完了しますが、C テーブルが別のプロセスによってロックされている場合、現在のプロセスは待機する必要があり、ユーザーがブラウザを閉じると、テーブル A と B に新しいコンテンツが存在します。一方CとD テーブルにはそのような内容が存在しないため、データの整合性に関する重大な問題が発生します。

データベース トランザクションを使用して状態をロールバックすることはできますが、結果としてユーザーの送信は無効になります。

私が望んでいるのは、ユーザーが送信した限り、正常に保存されることです。予期せぬ状況により実行時間が長すぎる可能性がありますが、ユーザーがブラウザを閉じても問題ありません。

そこで、ignore_user_abort 関数を見つけました。

ignore_user_abort(1) が呼び出されると、ユーザー出口を無視するフラグが設定されます。つまり、プログラム内で呼び出されない限り、プログラムは何があっても最後まで実行される必要があります。 出口。

実際には、別の関数 register_shutdown_function があり、これは関数またはメソッドを登録し、プログラムの終了時にそれを呼び出すことができます。 JavaScript の onunload および onbeforeunload イベント。

ここに中国語版の PHP マニュアルを引用しました 関連コンテンツ:

第 40 章 接続処理
注: 以下は PHP 3.0.7 以降に適用されます。

PHP 内部では、システムは接続ステータスを維持しており、そのステータスには 3 つの状況が考えられます。

0 - 通常

1 - ABORTED (異常終了)

2 - TIMEOUT (タイムアウト)

PHP スクリプトが NORMAL 状態で正常に実行されている場合、接続は有効です。リモートクライアントが切断されると中止される ステータスフラグがオンになります。リモート クライアント接続の中断は通常、ユーザーが [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 は接続が中断されたことを検出し、クローズ トリガー関数を呼び出します。

スクリプトは、組み込みのスクリプト タイマーによって中断される場合もあります。デフォルトのタイムアウト制限は 30 秒です。この値は、php.ini で max_execution_time を設定することによって設定できます。 Apache .conf 設定または set_time_limit() の対応する「php_value max_execution_time」パラメータ 変更する機能。カウンタがタイムアウトすると、上記の接続中断状況と同様にスクリプトが終了し、事前に登録されたシャットダウン トリガー関数もこの時点で実行されます。このシャットダウントリガー関数では、次の関数を呼び出すことができます。 connection_status() 関数を使用して、タイムアウトによってシャットダウン トリガー関数が呼び出されたかどうかを確認します。タイムアウトによりシャットダウン トリガー関数が呼び出された場合、関数は 2 を返します。

注意すべき点の 1 つは、ABORTED 状態と TIMEOUT 状態が同時に有効になる可能性があるということです。これは、PHP にユーザー終了アクションを無視するように指示する場合に可能です。 PHP ユーザーが切断されてもスクリプトがまだ実行されている状況を引き続き認識します。実行時間制限に達すると、スクリプトは終了し、設定されたシャットダウン トリガー関数も実行されます。この時点で、関数が見つかります connection_status() は 3 を返します。

PHP の公式 Web サイトのオンライン ドキュメントにはオリジナルの英語の説明があり、これも非常に貴重なリンクです。

?http://www.php.net/manual/en/features.connection-handling.php

転載元: http://www.leakon.com/archives/22

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

PHP:Web開発の重要な言語 PHP:Web開発の重要な言語 Apr 13, 2025 am 12:08 AM

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

PHP対Python:違いを理解します PHP対Python:違いを理解します Apr 11, 2025 am 12:15 AM

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

PHPとPython:2つの一般的なプログラミング言語を比較します PHPとPython:2つの一般的なプログラミング言語を比較します Apr 14, 2025 am 12:13 AM

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

アクション中のPHP:実際の例とアプリケーション アクション中のPHP:実際の例とアプリケーション Apr 14, 2025 am 12:19 AM

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

PHPの永続的な関連性:それはまだ生きていますか? PHPの永続的な関連性:それはまだ生きていますか? Apr 14, 2025 am 12:12 AM

PHPは依然として動的であり、現代のプログラミングの分野で重要な位置を占めています。 1)PHPのシンプルさと強力なコミュニティサポートにより、Web開発で広く使用されています。 2)その柔軟性と安定性により、Webフォーム、データベース操作、ファイル処理の処理において顕著になります。 3)PHPは、初心者や経験豊富な開発者に適した、常に進化し、最適化しています。

PHPおよびPython:さまざまなパラダイムが説明されています PHPおよびPython:さまざまなパラダイムが説明されています Apr 18, 2025 am 12:26 AM

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHP対その他の言語:比較 PHP対その他の言語:比較 Apr 13, 2025 am 12:19 AM

PHPは、特に迅速な開発や動的なコンテンツの処理に適していますが、データサイエンスとエンタープライズレベルのアプリケーションには良くありません。 Pythonと比較して、PHPはWeb開発においてより多くの利点がありますが、データサイエンスの分野ではPythonほど良くありません。 Javaと比較して、PHPはエンタープライズレベルのアプリケーションでより悪化しますが、Web開発により柔軟性があります。 JavaScriptと比較して、PHPはバックエンド開発により簡潔ですが、フロントエンド開発のJavaScriptほど良くありません。

PHPおよびPython:コードの例と比較 PHPおよびPython:コードの例と比較 Apr 15, 2025 am 12:07 AM

PHPとPythonには独自の利点と短所があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1.PHPは、大規模なWebアプリケーションの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンスと機械学習の分野を支配しています。

See all articles