ホームページ バックエンド開発 PHPチュートリアル PHP スケジュールされたタスクと fsockopen 連続プロセスの例_PHP チュートリアル

PHP スケジュールされたタスクと fsockopen 連続プロセスの例_PHP チュートリアル

Jul 13, 2016 am 10:29 AM
fsockopen スケジュールされたタスク

Web サーバーは PHP スクリプトを実行しますが、実行結果が返されるまでに時間がかかる場合があり、後続のスクリプトは実行を続行するまでに長時間待機する必要があります。
時間のかかるスクリプトの実行結果を待たずに単純に実行をトリガーし、次の操作を直接実行したい場合は、fskokopen 関数を使用できます。

PHP はソケット プログラミングをサポートしています。fscokopen 関数はリモート ホスト接続へのハンドルを返し、fopen から返されたハンドルを使用するのと同じように、fwrite、fgets、fread などの操作を実行できます。
fsockopen を使用してローカルサーバーに接続し、スクリプトの実行をトリガーし、スクリプトの実行が完了するのを待たずにすぐに戻ります。これにより、非同期 PHP 実行の効果が得られます。

例:

コードをコピーします コードは次のとおりです:

functiontriggerRequest($url, $post_data = array(), $cookie = array()){
$method = "GET"; //POST または GET を実行すると、トリガーされるスクリプトにいくつかのパラメーターが渡されます
$url_array = parse_url($url); // URL 情報を取得します
$port = isset($url_array['port'])? '] : 80 ;
$fp = fsockopen($url_array['host'], $port, $errno, $errstr, 30);
if (!$fp) {
return FALSE }
$getPath = $ url_array['path '] ."?". $url_array['query'];
if(!empty($post_data)){
$method = "POST" }
$header = " " . $getPath;
$header .= " HTTP/1.1rn";
$header .= "Host: ". $url_array['host'] . "rn ";以下のヘッダー情報フィールドは省略可能です
$header .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13 rn";
$header .= "受け入れる: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,q=0.5 rn"; header .= "Accept-Language : en-us,en;q=0.5 ";
$header .= "Accept-Encoding: gzip,deflatern"
*/

$header .= "Connection:Closern"; if(!empty($cookie )){
$_cookie = strval(NULL);
foreach($cookie as $k => $v){
$_cookie .= $k."=".$v." ; ";
}
$ cookie_str = "Cookie: " .base64_encode($_cookie) ." rn"; // Cookie を渡す
$header .= $cookie_str;
}
if(!empty($post_data)){
$_post = strval(NULL) ;
foreach($post_data as $k => $v){
$_post .= $k."=".$v."&";
$post_str = "コンテンツ-Type: application/x- www-form-urlencodedrn";
$post_str .= "Content-Length: ".strlen($_post) ." rn"; //POST データの長さ
$post_str .= $_post ."rnrn "; //POST データを転送
$header .= $post_str;
fwrite($fp, $header); // サーバーは
fclose( $fp);
true を返す }

このように、PHP スクリプトの実行は fsockopen() 関数を通じてトリガーされ、関数は戻ります。 次に、次のステップに進みます。
現在問題が発生しています。クライアントが切断されると、つまりtriggerRequestがリクエストを送信した後、接続はすぐに閉じられ、サーバー上で実行されているスクリプトが終了する可能性があります

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

* 0 – NORMAL (正常)
* 1 – ABORTED (異常終了)
* 2 – TIMEOUT (タイムアウト)

NORMAL 状態で PHP スクリプトが正常に実行される場合、接続は有効です。クライアントが切断されると、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() で実行のシャットダウン時に呼び出すことができる別の関数を設定できない限り、スクリプトは中断されます。これは、スクリプトの実行が完了したとき、または PHP が予期せず終了したときを意味します。実行がシャットダウンされようとしている場合、関数が呼び出されます。リモート ユーザーが STOP ボタンをクリックし、スクリプトがデータを再度出力しようとすると、PHP は接続が中断されたことを検出し、シャットダウン トリガー関数を呼び出します。

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

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

したがって、トリガーされるスクリプトにも指定します:

コードをコピーします コードは次のとおりです:

ignore_user_abort(TRUE) //クライアントが切断しても、スクリプトは中止されません
set_time_limit(0); /スクリプト実行の遅延をキャンセルします 制限時間
または次を使用します:
register_shutdown_function(callback fuction[,parameters]); //登録スクリプト終了時に実行される関数

www.bkjia.com本当http://www.bkjia.com/PHPjc/774992.html技術記事 Web サーバーは PHP スクリプトを実行しますが、実行結果が返されるまでに時間がかかる場合があり、後続のスクリプトは実行を続行するまでに長時間待機する必要があります。 時間のかかるシンプルなトリガーを実現したい場合...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

タスクをスケジュールして時点を指定し、atd サービスに依存する 1 回限りのタスクを実行する タスクをスケジュールして時点を指定し、atd サービスに依存する 1 回限りのタスクを実行する Mar 11, 2024 am 09:07 AM

スケジュールされたタスクは、一度に指定された時点で atat を実行するようにスケジュールされ、ワンタイム タスクは atd サービスに依存します。at タスクを実現するには開始する必要があります。at キューは /var/ に格納されます。 spool/at ディレクトリ -V: バージョン情報の表示 -l: 指定されたキューの一覧表示 実行を待機しているジョブ、atq-d と同等: 指定されたジョブの削除、atrm-c と同等: 特定のジョブ タスクの表示 [root@localhost~] #systemctlstartatd[root@localhost~]#systemctlenableatd[root@localhost~]# atnow+1minat>useraddxwzat>#

Laravel 開発: Laravel タスク スケジューリングを使用してタスクをスケジュールするにはどうすればよいですか? Laravel 開発: Laravel タスク スケジューリングを使用してタスクをスケジュールするにはどうすればよいですか? Jun 13, 2023 pm 02:23 PM

Laravel は、Web アプリケーション開発を強力にサポートする人気のある PHP フレームワークです。強力で便利な機能の 1 つは LaravelTask​​Scheduling です。この記事では、LaravelTask​​Schedulingを使用してスケジュールされたタスクを実行する方法を紹介します。 1.LaravelTask​​Schedulingのスケジュールされたタスクとは何ですか? LaravelTask​​Schedulingは

PHP の時間指定タスクと計画タスクのテクノロジ PHP の時間指定タスクと計画タスクのテクノロジ May 11, 2023 pm 04:13 PM

インターネットの急速な発展に伴い、データ クリーニング、バックアップ、統計分析など、スケジュールされたタスクや計画されたタスクをバックグラウンドで実行する必要がある Web サイトやアプリケーションがますます増えています。人気の Web 開発言語として、PHP にも対応するスケジュールされたタスクと計画されたタスクのテクノロジが提供されており、この記事では PHP のスケジュールされたタスクと計画されたタスクのテクノロジについて詳しく紹介します。 1. スケジュールされたタスクの概念と使用シナリオ 1.1 概念 スケジュールされたタスクとは、指定された時点または時間間隔内に、指定されたいくつかのタスクまたは操作を自動的に実行することを指します。 1.2メイク

Windows 7のスケジュール電源オン/オフを設定する方法は何ですか? Windows 7のスケジュール電源オン/オフを設定する方法は何ですか? Jul 10, 2023 pm 09:49 PM

Windows 7 のスケジュールされた電源オンとオフの設定方法をほとんどのユーザーは知りません。具体的には、win7 は自動的にシャットダウンするように設定できますが、ユーザーはその設定方法を知りません。実際には設定できます。簡単なコードを入力するだけで、cmd を使用して設定する必要がありますが、ここでは実際の Windows 7 のタイマー電源オン/オフの設定方法を紹介しますので、ユーザーはこれを参照して設定することができ、非常に簡単です。 Windows 7 でタイマーのオンとオフを設定する方法は何ですか? 1. 自動シャットダウンを設定します。実際、これはシステム自体の機能内からのみ実行できます。つまり、アクション ボックスにシャットダウン コマンドを入力します。メニューバーを開き、「アクション」をクリックします。そうでない場合は、ショートカット キーを押して開き、win+r を押して開きます。 2. 例えば、3時間後に電源を切りたい場合

PHP Web クローラーは fsockopen を使用して HTTP リクエストを実装します PHP Web クローラーは fsockopen を使用して HTTP リクエストを実装します Jun 17, 2023 am 11:02 AM

Web クローラーは、ユーザーの行動をシミュレートすることでネットワーク上のデータを自動的にキャプチャし、保存または分析できる自動データ収集ツールです。広く使用されている Web 開発言語として、PHP には豊富な Web クローラー開発ツールとテクノロジーもあります。この記事では、PHP の fsockopen 関数を使用して HTTP リクエストを実装し、簡単な Web クローラー システムを構築する方法を紹介します。 fsockopen関数はソケット通信に関するPHPです。

Webman フレームワークを通じて時間指定タスクと計画タスクを実装するにはどうすればよいですか? Webman フレームワークを通じて時間指定タスクと計画タスクを実装するにはどうすればよいですか? Jul 08, 2023 am 11:43 AM

Webman フレームワークを通じて時間指定タスクと計画タスクを実装するにはどうすればよいですか? Webman は、Go 言語に基づいて開発された軽量の Web フレームワークで、スケジュールされたタスクと計画されたタスクを実装する簡単な方法を提供します。この記事では、Webman フレームワークを使用して時間指定タスクとスケジュールされたタスクを実装する方法を紹介し、対応するコード例を示します。 Webman フレームワークを使用する前に、まず Webman をインストールする必要があります。 Webman は次のコマンドでインストールできます: gogetgithub.com/he

PHP とミニプログラムを使用した時間指定タスクと計画タスクの管理 PHP とミニプログラムを使用した時間指定タスクと計画タスクの管理 Jul 04, 2023 am 10:05 AM

PHP および小規模プログラムのタスクのタイミングと計画されたタスク管理 インターネット技術の継続的な発展に伴い、多くの Web サイトやアプリケーションは、データ クリーニング、データ分析、データ同期などの特定のタスクを定期的に実行する必要があります。 PHP や小規模プログラムの開発では、スケジュールされたタスクと計画されたタスクをどのように管理するかが重要なトピックです。この記事では、PHP とアプレットを使用して時間指定タスクと計画タスクを管理する方法を紹介し、対応するコード例を示します。 PHP でのスケジュールされたタスクの管理 PHP では、Cron を使用してスケジュールされたタスクを管理できます。

Win7システムでコンピュータのスケジュールされたタスクを設定する方法 Win7システムでコンピュータのスケジュールされたタスクを設定する方法 Jul 10, 2023 pm 01:41 PM

プロジェクトを始めるという言葉をよく目にします。実際、これはコンピューターのスケジュールされたタスクの設定です。コンピューターが起動すると、これらのスケジュールされたタスクが Win7 システムで開始されます。一部のタスクは開始する必要がありますが、その他のタスクは開始する必要はありません。この点に関して、これらのスケジュールされたタスクを設定できます。詳しい動作を見てみましょう。 1. まず、コンピューター上のスタート メニュー バーを見つけます。 [スタート] メニューで関連オプションが表示され、[コントロール パネル] オプションを見つけてクリックして入力します。 2. コンピュータのコントロール パネルに入ると、システムとセキュリティのオプションが表示され、現在のページの最初の行にあるボタンをクリックして開きます。 3. コンピュータのコントロール パネルのシステムとセキュリティのオプションを入力すると、下部に管理ツール ボタンが表示されます。

See all articles