ホームページ  >  記事  >  バックエンド開発  >  PHP でタスクを定期的に実行するいくつかの方法の詳細な説明

PHP でタスクを定期的に実行するいくつかの方法の詳細な説明

WBOY
WBOYオリジナル
2016-07-25 08:58:541115ブラウズ
  1. ignore_user_abort(true);

  2. set_time_limit(0);

  3. function write_txt(){

  4. if(!file_exists("test. txt")){
  5. $fp = fopen("test.txt","wb");
  6. fclose($fp);
  7. }
  8. $str = file_get_contents('test.txt');
  9. $str .= " rn".date("H:i:s");
  10. $fp = fopen("test.txt","wb");
  11. fwrite($fp,$str);
  12. fclose($fp);
  13. }

  14. function do_cron(){

  15. usleep(20000000);
  16. write_txt();
  17. }

  18. while(1){

  19. do_cron();
  20. }

コードをコピーします

2 つの主要な機能: ignore_user_abort(true)、この関数の機能は、クライアントがブラウザを閉じるかどうかに関係なく、次のコードが実行されることです。 set_time_limit(0)、この関数の機能は、PHP ファイルの実行時間をキャンセルすることです。そのような関数がない場合、デフォルトの PHP 実行時間は 30 秒です。これは、30 秒後にファイルが終了することを意味します。

さらに、usleep は PHP5.0 以降の Windows オペレーティング システムをサポートします。

PHP の電子メール送信の問題を実行しているときに、この問題がよく発生します。つまり、ユーザーがユーザーのメールボックスに定期的に送信する必要がある情報を購読しているということです。インターネットで調べてみると、このような記事はあまりありませんでしたので、この記事で紹介します。 PHP を使用して実装されたメソッド。著者は長い間 PHP を使用していません。どなたでも PP を使用できます。

1. スケジュールされた送信を実現するには、解決すべき主な問題はタイミングです。 プログラムを書くときにどのような if を追加すればよいでしょうか? ある時刻 = ある時刻であればページを送信しますが、この処理を実装するには、送信する前にこのページを実行する必要があるという問題があります。 。したがって、解決すべき主な問題は、時間になったときに商品をどのように届けるかです。 サーバーはこのページを定期的に実行しますが、これを実装するのは難しいようです。

次に、php マニュアルを開いて、学習できる PHP のコマンドライン モードを見つけます。

3. 解決策: 1. Windows プラットフォームでは、cliphp.exe および .php ファイルのダブルクリック属性を関連付けたり、PHP でスクリプトを実行するバッチ ファイルを作成したりできます。作成したプログラムを次のディレクトリに置きます。

  1. E:web Timesend.php
  2. #!/usr/bin/php
  3. require_once("E:webincludesconfig.php")
  4. require_once("E:webincludesclassmail.class.php") );
  5. require_once("E:webincludesclasssmtp.class.php");
  6. // +------+
  7. //データベース構成
  8. $dbhost = "localhost";
  9. $dbport = "3306";
  10. $ dbname = "";
  11. $dbuser = "";
  12. $dbpawd = "";
  13. // +---------+
  14. //データベース接続オブジェクト
  15. $db = new dbLink($dbhost,$ dbport,$dbuser,$dbpawd,$dbname);
  16. $query = "SELECT * FROM wl_mailtemplate WHERE mt_name = 'UserUpdate'";
  17. $mailtemplate =$db->dbQuery($query);
  18. $username = 'sdfsdfdsd ';
  19. $sex = "先生";
  20. $accounts = "sdfasdfasdfsad";
  21. $password = "sdfsadfsdasdasddssfds";
  22. $message = "
  23. $message =addlashes($message);
  24. eval_r("$message = "$ message";");
  25. $mail = new SendMail('wfits@jbxue.com', $mailtemplate[0]['mt_subject'], nl2br($message));
  26. if ($mail->Send() )
  27. {
  28. $フィードバック = "変更確認メッセージが登録メールアドレスに送信され、現在のログインはログアウトされました。 \n確認メールを確認し、新しいログイン パスワードを取得してください。 ";
  29. echo $フィードバック;
  30. }
  31. ?>
コードをコピー

batファイルを書き込みます。

  1. @D:phpcliphp.exe E:webmail.php >d:phpclisendmail.log
  2. 一時停止
コードをコピー

timesend.bat という名前で保存し、@D:phpcliphp.exe ディレクトリに置きます

スケジュールされたタスクをウィンドウに追加するだけです!

5. 説明。 1. メールの送信に使用するテンプレートはデータベースに保存されていますが、提供されていないメール送信クラスも 2 つあります。ご希望の場合は、お問い合わせください。 2. requrie_once を使用する場合は絶対パスを使用します。 3. PHP のコマンド ライン モードでは、PHP スクリプトを WEB サーバーから完全に独立して実行できるため、大量の電子メールを送信する際のサーバーの負荷を軽減できます。 4. もう一度、PHP マニュアルの第 23 章「PHP コマンド ライン モード」を読むことをお勧めします。

実際には、これは実際にメールを自動的に送信する方法ではありませんが、デスクトップアプリケーションを使用しないWEBモードでは、これはより良い方法かもしれません~! , サービス内で本当にメールの自動送信を実現するシステムが欲しい サーバー側でサポートするデスクトップ アプリケーションがまだあります。つまり、この電子メールの自動送信は、電子メールを送信するための PHP プログラムを実装する方法にすぎません。

  1. " . $mailtemplate[0]['mt_message']. "

  2. ";
  3. ignore_user_abort(); // クライアントが切断されていても(閉じるなど)
  4. set_time_limit(0); //PHP のデフォルトの実行時間は、set_time_limit(0) を介して無制限に実行できます。
  5. $interval=20 ; // 時間間隔の単位は秒です
  6. $key_file="key.txt" // 設定ファイル

  7. if (isset($_GET['s']))

  8. {
  9. if ($ _GET['s']=="0"){ // 作業を停止しますが、終了しないでください
  10. $s="false";
  11. echo "機能がオフです";
  12. }
  13. elseif ($ _GET['s']= ="1"){ // Work
  14. $s="true";
  15. echo "関数はオンです";
  16. }
  17. elseif ($_GET['s']=="2") { // Exit
  18. $s ="die";
  19. echo "関数が終了しました";
  20. }
  21. else
  22. die("Err 0:stop working 1:working 2:exit");
  23. $string = "";
  24. write_inc($key_file,$string,true);
  25. exit();
  26. }

  27. if(file_exists( $key_file)){

  28. do {
  29. $mkey = include $key_file;
  30. if ($mkey=="true"){ // うまくいけば
  31. ////////// workspace///// ///
  32. $showtime= date("Y-m-d H:i:s");
  33. $fp = fopen('func.txt','a');
  34. fwrite($fp,$showtime."n");
  35. fclose($fp);
  36. ///////////////
  37. }
  38. elseif ($mkey=="die"){ // exit の場合
  39. die("私は死にます! ");
  40. }
  41. sleep ($interval); // $interval 分待ちます
  42. }while(true);
  43. }
  44. else
  45. die($key_file." は存在しません !");
  46. //bbs より。 it-home.org
  47. function write_inc($path,$strings,$type=false)

  48. {
  49. $path=dirname(__FILE__)."/".$path;
  50. if ($ type==false)
  51. file_put_contents ($path,$strings,FILE_APPEND);
  52. else
  53. file_put_contents($path,$strings);
  54. }
  55. ?>

コードをコピー


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