ホームページ  >  記事  >  バックエンド開発  >  PHPでスケジュールされたタスクの実行

PHPでスケジュールされたタスクの実行

WBOY
WBOYオリジナル
2016-06-13 13:19:46722ブラウズ

PHP のスケジュールされたタスクの実装

php スケジュールされたタスクの実装 (zt)
記事カテゴリ: PHP プログラミング
ignore_user_abort(); //クライアントが切断された場合でも (ブラウザを閉じるなど)、 PHP スクリプトは継続して実行できます。
set_time_limit(0); // PHP のデフォルトの実行時間は 30 秒です。 🎜>$interval=60* 5; //
do{ を 5 分ごとに実行します
$fp = fopen('test.txt','a'); );
fclose ($fp);
sleep($interval); // 5 分間待ちます
?>

PHP スケジュールタスク入門 2010-05-06 10:10 SE に特に興味があったのですが、Java や Lucene などの検索エンジン開発ツールを知らなかったので、その有効性を模索し続けましたPHPの。

最後に、PHP はクロールにも使用できることがわかりました。原理は非常に単純です。ページのソース ファイルを直接取得し、通常の参照または文字列参照のインターセプトを通じて必要な情報を取得します。ただし、そのパフォーマンスは検索エンジンのマルチスレッド クロールとは比較できません。


前の手順を実装した後、スケジュールされた時間にクロールを自動的に取得できれば、実行可能ページを手動で実行する手間が省けるのではないかと考えました。

その後、一部の PHP オープンソース プログラムにおける「スケジュールされたタスク」の効果についても学びました。データベースのバックアップ、キャッシュの更新、静的ページの生成、Web サイト マップの生成などのプログラムを定期的に実行できます。

最近、プロジェクトでリモート データベースをローカル データベースに定期的に更新する必要があるため、オンラインで検索して見つけました。

ignore_user_abort(); 関数は、set_time_limit(0) および sleep($interval); と組み合わせて、上記の自動更新を実現します。

まず、個人的なテスト プログラムを含む基本的なパラダイムを示します。

ignore_user_abort(); // スクリプトをバックグラウンドで実行します

set_time_limit(0); // スクリプトを永久に実行します

$interval=30; // 15 分ごとに実行します

do{
$fp = fopen('text3.txt','a');
fwrite($fp,'test');
fclose($fp);
スリープ($interval); // 15 分間待ちます
}while(true);
?>

まずプログラムを実行してからページを閉じます。プログラムはまだ実行中で、テストは 30 秒ごとに text3.txt ファイルに書き込まれます。

効果は図のとおりです(略)

最後に、PHP マニュアルに基づいた関連知識を簡単に紹介します。

1. 接続処理:

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

0 - NORMAL (正常)

1 - ABORTED (異常終了)

2 - TIMEOUT (タイムアウト)

PHP スクリプトが NORMAL 状態で正常に実行されている場合、接続は有効です。リモート クライアントが切断されると、ABORTED ステータス フラグがオンになります。リモート クライアント接続の中断は通常、ユーザーが [STOP] ボタンをクリックしたことによって発生します。接続時間が PHP の制限時間を超えると、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 を返すことがわかります。

2. 関連機能:

intignore_user_abort ( [bool settings] )

この関数は、クライアントの切断によってスクリプトが中止されるかどうかを設定します。以前の設定が返され、現在の設定を変更せずにのみ引数なしで呼び出すことができます。現在の設定を返します。

int connection_aborted ( void )

クライアントが切断された場合は TRUE を返します。

int connection_status ( void )

接続ステータスのビットフィールドを返します。


この記事は CSDN ブログからのものです。転載する場合は出典を明記してください: http://blog.csdn.net/webdesman/archive/2009/09/02/4510372.aspx
?

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