ホームページ >バックエンド開発 >PHPチュートリアル >PHP でスケジュールされたタスクを実装するにはどうすればよいですか?

PHP でスケジュールされたタスクを実装するにはどうすればよいですか?

黄舟
黄舟オリジナル
2017-11-14 09:46:1724983ブラウズ

PHP のスケジュールされたタスクの実装原理については、前回の記事でご紹介しました。PHP のスケジュールされたタスクの実装原理については、引き続きご紹介します。

コースの推奨事項: "PHP オンライン トレーニング コース"

1. Windows のスケジュールされたタスク

1. test.php という名前の PHP プログラムを作成します。は次のとおりです

test.php,内容如下所示


<?   
    $fp = fopen("test.txt", "a+");   
    fwrite($fp, date("Y-m-d H:i:s") . " 成功成功了!\n");   
    fclose($fp);   
?>

程序大胆地写,什么includerequire尽管用,都没问题

2、新建Bat文件,命名为test.bat,内容如下所示:


D:\php\php.exe -q D:\website\test.php

3、建立WINDOWS计划任务:

开始–>控制面板–>任务计划–>添加任务计划

浏览文件夹选择上面的bat文件

设置时间和密码(登陆WINDOWS的)

保存即可了。

4、over! 可以右键计划任务点“运行”试试

二、linux 的脚本实现

一、在Crontab中使用PHP执行脚本

就像在Crontab中调用普通的shell脚本一样(具体Crontab用法),使用PHP程序来调用PHP脚本。

每一小时执行myscript.php如下:


# crontab -e  
00 * * * * /usr/local/bin/php /home/john/myscript.php

/usr/local/bin/php为PHP程序的路径。

二、在Crontab中使用URL执行脚本

如果你的PHP脚本可以通过URL触发,你可以使用lynx或curl或wget来配置你的Crontab。

下面的例子是使用Lynx文本浏览器访问URL来每小时执行PHP脚本。Lynx文本浏览器默认使用对话方式打开URL。但是,像下面的,我在lynx命令行中使用-dump选项来把URL的输出转换来标准输出。


00 * * * * lynx -dump http:
//www.centos.bz/myscript.php

下面的例子是使用CURL访问URL来每5分执行PHP脚本。Curl默认在标准输出显示输出。使用”curl -o”选项,你也可以把脚本的输出转储到临时文件。


*/5 * * * * /usr/bin/curl -o temp.txt http:
//www.centos.bz/myscript.php

下面的例子是使用WGET访问URL来每10分执行PHP脚本。-q选项表示安静模式。”-O temp.txt”表示输出会发送到临时文件


*/10 * * * * /usr/bin/wget -q -O temp.txt http:
//www.centos.bz/myscript.php

三、PHP实现定时执行计划任务

使用php让浏览器刷新需要解决几个问题

1、PHP脚本执行时间限制,默认的是30m 解决办法:set_time_limit();或者修改PHP.ini 设置max_execution_time时间(不推荐)

2、如果客户端浏览器关闭,程序可能就被迫终止,解决办法:ignore_user_abort即使关闭页面依然正常执行

3、如果程序一直执行很有可能会消耗大量的资源,解决办法使用sleep

<?php   
    ignore_user_abort();//关掉浏览器,PHP脚本也可以继续执行.   
    set_time_limit(3000);// 通过set_time_limit(0)可以让程序无限制的执行下去   
     $interval=5;// 每隔5s运行   
    
     //方法1--死循环   
     do{   
        echo &#39;测试&#39;.time().&#39;<br/>&#39;;    
        sleep($interval);// 等待5s       
    }while(true);   
    
    //方法2---sleep 定时执行   
     require_once &#39;./curlClass.php&#39;;//引入文件   
        
     $curl = new httpCurl();//实例化   
     $stime = $curl->getmicrotime();   
    for($i=0;$i<=10;$i++){   
            
        echo &#39;测试&#39;.time().&#39;<br/>&#39;;    
        sleep($interval);// 等待5s   
            
    }   
    ob_flush();   
    flush();   
    $etime = $curl->getmicrotime();   
    echo &#39;<hr>&#39;;   
    echo round(($etime-stime),4);//程序执行时间


プログラムは大胆に記述されていますが、どのような includerequire を使用しても問題ありません

2. 新しい Batを作成します> ファイルを作成し、test .bat という名前を付けます。内容は次のとおりです:


rrreee

3. WINDOWS 計画タスクを確立します:


スタート -> コントロール パネル -> タスク スケジュール -> タスク プランの追加

フォルダーを参照して、上の bat ファイルを選択します

時間とパスワード (WINDOWS にログイン) 保存します。

4. スケジュールされたタスクを右クリックし、[実行] をクリックして試してください

2. Linux スクリプトの実装

1. PHP を使用して Crontab でスクリプトを実行します Crontab と同じように 通常のシェル スクリプト (Crontab の特定の使用法) を呼び出すのと同じように、PHP プログラムを使用して PHP スクリプトを呼び出します。

次のように myscript.php を 1 時間ごとに実行します: 🎜

🎜🎜rrreee🎜🎜🎜🎜/usr/local/bin/php (PHP 用)プログラムのパス。 🎜🎜🎜2. URL を使用して Crontab でスクリプトを実行する🎜🎜🎜PHP スクリプトを URL によってトリガーできる場合は、lynx、curl、または wget を使用して Crontab を構成できます。 🎜🎜以下の例は、Lynx テキスト ブラウザを使用して URL にアクセスし、1 時間ごとに PHP スクリプトを実行します。 Lynx テキスト ブラウザは、デフォルトで会話モードを使用して URL を開きます。ただし、以下に示すように、lynx コマンド ラインで -dump オプションを使用して、URL 出力を標準出力に変換します。 🎜

🎜🎜rrreee

🎜🎜🎜次の例は、CURLを使用してURLにアクセスし、5分ごとにPHPスクリプトを実行する例です。 Curl は、デフォルトで出力を標準出力に表示します。 「curl -o」オプションを使用して、スクリプトの出力を一時ファイルにダンプすることもできます。 🎜

🎜🎜rrreee🎜 以下の例は、WGET を使用して URL にアクセスし、実行します。 10分ごとのPHPスクリプト。 -q オプションは、Quiet モードを示します。 「-O temp.txt」は、出力が一時ファイルに送信されることを意味します🎜

🎜🎜rrreee 🎜🎜3. PHP はスケジュールされたタスクのスケジュールされた実行を実装します🎜🎜🎜PHP を使用してブラウザを更新するには、いくつかの問題を解決する必要があります🎜🎜1. デフォルトは 30m です。 : set_time_limit();または、PHP.ini を変更して max_execution_time 時間を設定します (非推奨) 🎜🎜🎜2. クライアントのブラウザが閉じている場合、プログラムは強制的に解決策 : ignore_user_abort ページが閉じられても、通常どおり実行されます 🎜🎜🎜3. プログラムが実行され続ける場合、解決策は、を使用することです。 sleep でプログラムをしばらくスリープさせてから、PHP のスケジュールされた実行コード🎜🎜🎜🎜rrreee🎜を実行すると、効率があまり高くないことがわかりました🎜🎜🎜概要:🎜🎜🎜🎜これこの記事では、Windows スケジュールされたタスク、Linux スクリプト、および PHP を使用してスケジュールされたタスクを実行します。この例により、PHP によるスケジュールされたタスクのスケジュールされた実行についてより直接的に理解できるようになります。 🎜🎜🎜関連する推奨事項: 🎜🎜🎜スケジュールされたタスクを実装する PHP の原理分析🎜🎜🎜🎜🎜php スケジュールされたタスクと連続プロセス (fsockopen) の例🎜🎜🎜🎜🎜php スケジュールされたタスクによるユーザー接続ステータスの検出🎜 🎜🎜

以上がPHP でスケジュールされたタスクを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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