前段時間在研究thinkphp5.0版本作自動任務的時候,碰到了棘手的問題–如何作自動化任務,由於程序開始就須要一直執行,查了不少資料,都說靠php原生的死循環來作不靠譜,時間偏差也無法保證,因此後面採用thinkphp5的command工具和服務器的定時任務來作:php
最簡單的方法就算是直接在PHP代碼裏面實現 不過感受不夠高大上html
<?php ignore_user_abort();//關掉瀏覽器,PHP腳本也能夠繼續執行. set_time_limit(3000);// 經過set_time_limit(0)能夠讓程序無限制的執行下去 $interval=5;// 每隔5s運行 //方法1--死循環 do{ echo'測試'.time().'<br/>'; sleep($interval);// 等待5s }while(true); //方法2---sleep 定時執行 require_once'./curlClass.php';//引入文件 $curl= new httpCurl();//實例化 $stime= $curl->getmicrotime(); for($i=0;$i<=10;$i++){ echo'測試'.time().'<br/>'; sleep($interval);// 等待5s } ob_flush(); flush(); $etime= $curl->getmicrotime(); echo'<hr>'; echoround(($etime-stime),4);//程序執行時間
在application/模塊/新建一個command文件夾/Test.class.phpthinkphp
<?php namespace app\admin\command; use think\console\Command; use think\console\Input; use think\console\Output; class Test extends Command { protected function configure(){ $this->setName('Test')->setDescription("計劃任務 Test"); } protected function execute(Input $input, Output $output){ $output->writeln('Date Crontab job start...'); /*** 這裏寫計劃任務列表集 START ***/ $this->test(); /*** 這裏寫計劃任務列表集 END ***/ $output->writeln('Date Crontab job end...'); } private function test(){ echo "test\r\n"; } }
<?php return ['app\admin\command\Test'];
打開命令行,運行php think Test命令test命令execute方法中運行的方法就會運行windows
task.bat文件瀏覽器
D:
cd D:\xampp\htdocs\autobet php think Test
這個根據window和Linux系統不同,定時任務設置方法也不一樣,能夠自行百度,我用的是本地的windows服務,詳情看百度經驗:Windows計劃任務設置,定時執行指定腳本服務器