ホームページ  >  記事  >  バックエンド開発  >  PHP スケジュールされたタスクのサンプル チュートリアル

PHP スケジュールされたタスクのサンプル チュートリアル

WBOY
WBOYオリジナル
2016-07-25 09:12:261020ブラウズ

uhome でスケジュールされたタスクを設定する方法をご覧ください: 1. スケジュールされたすべてのタスクをデータベースに保存する 2. ユーザーが操作を行ったり、ページを開くたびに、スケジュールされたタスクが順番に判断され、時間が経過するとユーザー プロセスで実行されます。 uhome のスケジュールされたタスクのコードは ./source/function_cron.php にあります。 上記は、スケジュールされたタスクに関する uhome コードのおおよその結果を分析するだけです。

ignore_user_abort() 私は少し前にスケジュールされたタスクについて徹底的に研究しました。スケジュールされたタスクには多くのアイデアがあると思いますが、Web に最も適しているのは、DZ や PHPWind に似たトリガー タイプです。ほとんどの Web アプリケーションでもこれが行われているようです。参考までにその他のものもいくつか紹介します。 1. 安定したトリガーを提供するには、crontab+wget または ab を使用してスケジュールされたアクセスを提供します。 2. nohup + php書き込みデーモン 3. PHP で直接無限ループを作成し、トリガーを提供します。この場合、ループの起動を支援するためにキャッシュまたはデータベースを使用する必要があり、トリガーの頻度を制御するために sleep または usleep を使用する必要があります。 4.crontab+php 5. Web トリガー方法には違いがあります。1 つは時間トリガー、もう 1 つは定期トリガーです。DZ と PHPWind は両方とも時間トリガーです。

ホストがある場合は、crontabを使用してコマンドラインPHPを実行する必要があります もうコードには何も書けない ループを使用する場合は、ループを特定の処理プログラムから分離するのが最善です。そうしないと、メモリが増加し続けます。

PHP マニュアルでこの関数 -ignore_user_abort を見つけました。この関数は Linux で cron のようなスケジュールされたタスクを実装するのに役立ちます。実装方法を見てみましょう。 まずはこの関数についてのPHPマニュアルの説明を見てみましょう。 説明 intignore_user_abort ([ bool $setting ] ) クライアントの切断によってスクリプトが中止されるかどうかを設定します。 つまり、クライアントがブラウザを閉じるかどうかに関係なく、次のプログラムが実行されます。

パラメータを見てみましょう: パラメーター 設定 設定されていない場合、関数は現在の設定のみを返します。 この関数は、ignore_user_abort 関数を有効にするかどうかを決定するパラメーターを受け取ります。

その戻り値を見てください: 戻り値 以前の設定をブール値として返します。 ここでは、前の設定が返され、それが bool 値であると書かれていますが、テストしたところ、このステートメントは間違っており、戻り値は明らかに int 型です。

PHP のこの関数を使用してスケジュールされたタスクを実装するにはどうすればよいですか? 別の関数を使用することもできます。この関数は set_time_limit で、set_time_limit0 までです) プログラムの実行時間を無制限に設定できます。PHP のデフォルトの実行時間は 30 秒です。 set_time_limit(0 ) を使用すると、プログラムを無制限に実行できます。

プログラムが実行される前に、ignore_user_abort(1) と set_time_limit(0) を追加するだけです。

例:

ignore_user_abort(); // スクリプトをバックグラウンドで実行します
    set_time_limit(0); // スクリプトを永久に実行します
  1. $interval=30; // 15 分ごとに実行します…
  2. do{
  3. $ fp = fopen('text3.txt','a');
  4. fwrite($fp,'test');
  5. fclose($fp);
  6. sleep($interval) // 15 分間待機します
  7. }while(true) );
  8. ?>
  9. コードをコピー
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。