1、方法一:v3.2.1
①、thinkphp/Library/Behavior/CronRunBehavior.class.php文件
在這里首先要說的就是這個自動執(zhí)行任務文件,官方所給的這個文件存在BUG,我是用的是v3.2.1版本,后面的版本是否有改正大家可以嘗試一下。
<?php /** * ======================================= * Created by WeiBang Technology. * Author: ZhiHua_W * Date: 2016/9/22 0005 * Time: 上午 11:12 * Project: ThinkPHP實現(xiàn)定時執(zhí)行任務 * Power: 自動執(zhí)行任務 * ======================================= */ namespace Behavior; class CronRunBehavior { public function run(&$params) { if (C('CRON_CONFIG_ON')) { $this->checkTime(); ????????} ????} ? ????private?function?checkTime() ????{ ????????if?(F('CRON_CONFIG'))?{ ????????????$crons?=?F('CRON_CONFIG'); ????????}?else?if?(C('CRON_CONFIG'))?{ ????????????$crons?=?C('CRON_CONFIG'); ????????} ? ????????if?(!empty($crons)?&&?is_array($crons))?{ ????????????$update?=?false; ????????????$log?=?array(); ????????????foreach?($crons?as?$key?=>?$cron)?{ ????????????????if?(empty($cron[2])?||?$_SERVER['REQUEST_TIME']?>?$cron[2])?{ ????????????????????G('cronStart'); ????????????????????R($cron[0]); ????????????????????G('cronEnd'); ????????????????????$_useTime?=?G('cronStart',?'cronEnd',?6); ????????????????????$cron[2]?=?$_SERVER['REQUEST_TIME']?+?$cron[1]; ????????????????????$crons[$key]?=?$cron; ????????????????????$log[]?=?'Cron:'?.?$key?.?'?Runat?'?.?date('Y-m-d?H:i:s')?.?'?Use?'?.?$_useTime?.?'?s?'?.?"rn"; ????????????????????$update?=?true; ????????????????} ????????????} ????????????if?($update)?{ ????????????????ThinkLog::write(implode('',?$log)); ????????????????F('CRON_CONFIG',?$crons); ????????????} ????????} ????} }
②、tgs.php
立即學習“PHP免費學習筆記(深入)”;
在Application/Common/Conf文件夾中新建tags.php文件,進行標簽設置。
<?php return array( //'配置項'=>'配置值' 'app_begin'?=>array('BehaviorCronRunBehavior'), );
③、config.php
在Application/Common/Conf文件夾中的config.php文件進行自動運行配置。
<?php return array( /* 自動運行配置 */ 'CRON_CONFIG_ON' =>?true,?//?是否開啟自動運行? 'CRON_CONFIG'?=>?array(? ????'測試執(zhí)行定時任務'?=>?array('Home/Index/crons',?'5',?''),?//路徑(格式同R)、間隔秒(0為一直運行)、指定一個開始時間? ), );
④、IndexController.class.php
在Application/Home/Controller/IndexController.class.php文件中進行定時執(zhí)行任務的編寫。
<?php /** * ======================================= * Created by WeiBang Technology. * Author: ZhiHua_W * Date: 2016/9/22 0005 * Time: 上午 11:20 * Project: ThinkPHP實現(xiàn)定時執(zhí)行任務 * Power: 自動執(zhí)行任務方法控制器 * ======================================= */ namespace HomeController; use ThinkController; class IndexController extends Controller { /* public function index(){ $this->show('<style>*{ padding: 0; margin: 0; } div{ padding: 4px 48px;} body{ background: #fff; font-family: "微軟雅黑"; color: #333;} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.8em; font-size: 36px }</style><div>?<h1>:)</h1> <p>歡迎使用?<b>ThinkPHP</b>!</p> </div><script></script>','utf-8'); ????} ????*/ ????public?function?index() ????{ ????????$contents?=?file_get_contents("test.txt"); ????????//每次訪問此路徑將內(nèi)容輸出,查看內(nèi)容的差別 ????????var_dump($contents); ????????exit; ????????$this->assign("contents",?$contents); ????????$this->display(); ????} ? ????//定時執(zhí)行的方法 ????public?function?crons() ????{ ????????//在文件中寫入內(nèi)容 ????????file_put_contents("test.txt",?date("Y-m-d?H:i:s")?.?"執(zhí)行定時任務!"?.?"rn<br>",?FILE_APPEND); ????} }
?這樣定時執(zhí)行任務我們就寫好了,每隔5秒我們訪問任何項目的url,然后查看根目錄下的test.txt文件就會發(fā)現(xiàn)里面的內(nèi)容變化。
注意:當你修改間隔時間時會發(fā)現(xiàn)沒有生效,這是你需要將Runtime/Data文件夾下的緩存文件刪除,間隔時間緩存存放在CRON_CONFIG.php文件中。
2、方法2:v3.2.2
此方法和方法一沒有多大的區(qū)別。
①、tags.php
在/Application/Common/Conf目錄下新建tags.php文件。(此和方法一處一樣)
<?php return array( //'配置項'=>'配置值' 'app_begin'?=>array('BehaviorCronRunBehavior'), );
②、crons.php
在/Application/Common/Conf目錄下新建crons.php文件。(此處和方法一有區(qū)別,注意區(qū)分。)
<?php return array( //myplan為我們計劃定時執(zhí)行的方法文件,2是間隔時間,nextruntime下次執(zhí)行時間 //此文件位于/Application/Cron/目錄下 'cron' =>?array('myplan',?2,?nextruntime), );
③、myplan.php
在/Application/Common/目錄下新建 Cron文件夾,里面新建文件myplan.php文件。
<?php echo date("Y-m-d H:i:s")."執(zhí)行定時任務!" . "rn<br>";
此時我們就可以訪問項目的url,然后我們會發(fā)現(xiàn)在Application/Runtime/目錄下生成了~crons.php文件,文件內(nèi)容如下:
<?php return array ( 'cron' => ????????????array?( ????????????????0?=>?'myplan', ????????????????1?=>?60, ????????????????2?=>?1398160322, ????????????), ????); ? ?>
推薦教程:thinkphp教程