ThinkPHP实现定时执行任务的两种方法
1、方法一:v3.2.1
①、ThinkPHP/Library/Behavior/CronRunBehavior.class.php文件
在这里首先要说的就是这个自动执行任务文件,官方所给的这个文件存在BUG,我是用的是v3.2.1版本,后面的版本是否有改正大家可以尝试一下。
[php]viewplain
namespaceBehavior;
classCronRunBehavior
{
publicfunctionrun(&$params)
{
if(C('CRON_CONFIG_ON')){
$this->checkTime();
}
}
privatefunctioncheckTime()
{
if(F('CRON_CONFIG')){
$crons=F('CRON_CONFIG');
}elseif(C('CRON_CONFIG')){
$crons=C('CRON_CONFIG');
}
if(!empty($crons)&&is_array($crons)){
$update=false;
$log=array();
foreach($cronsas$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-dH:i:s').'Use'.$_useTime.'s'."\r\n";
$update=true;
}
}
if($update){
\Think\Log::write(implode('',$log));
F('CRON_CONFIG',$crons);
}
}
}
}
此段代码已经将bug修复,大家可以将其复制到“ThinkPHP/Library/Behavior/CronRunBehavior.class.php”文件中进行保存。
②、tgs.php
在Application/Common/Conf文件夹中新建tags.php文件,进行标签设置。
[php]viewplain
returnarray(
//'配置项'=>'配置值'
'app_begin'=>array('Behavior\CronRunBehavior'),
);
③、config.php
在Application/Common/Conf文件夹中的config.php文件进行自动运行配置。
[php]viewplain
returnarray(
'CRON_CONFIG_ON'=>true,//是否开启自动运行
'CRON_CONFIG'=>array(
'测试执行定时任务'=>array('Home/Index/crons','5',''),//路径(格式同R)、间隔秒(0为一直运行)、指定一个开始时间
),
);
④、IndexController.class.php
在Application/Home/Controller/IndexController.class.php文件中进行定时执行任务的编写。
[php]viewplain
namespaceHome\Controller;
useThink\Controller;
classIndexControllerextendsController
{
/*
publicfunctionindex(){
$this->show(' 欢迎使用ThinkPHP! } */ publicfunctionindex() { $contents=file_get_contents("test.txt"); var_dump($contents); exit; $this->assign("contents",$contents); $this->display(); } publicfunctioncrons() { file_put_contents("test.txt",date("Y-m-dH:i:s")."执行定时任务!"."\r\n } } 这样定时执行任务我们就写好了,每隔5秒我们访问任何项目的url,然后查看根目录下的test.txt文件就会发现里面的内容变化。 注意:当你修改间隔时间时会发现没有生效,这是你需要将Runtime/Data文件夹下的缓存文件删除,间隔时间缓存存放在CRON_CONFIG.php文件中。 纯净的项目文件下载地址: 2、方法2:v3.2.2 此方法和方法一没有多大的区别。 ①、tags.php 在/Application/Common/Conf目录下新建tags.php文件。(此和方法一处一样) [php]viewplain returnarray( 'app_begin'=>array('Behavior\CronRunBehavior'), ); ②、crons.php 在/Application/Common/Conf目录下新建crons.php文件。(此处和方法一有区别,注意区分。) [php]viewplain returnarray( 'cron'=>array('myplan',2,nextruntime), ); ③、myplan.php 在/Application/Common/目录下新建Cron文件夹,里面新建文件myplan.php文件。 [php]viewplain echodate("Y-m-dH:i:s")."执行定时任务!"."\r\n 此时我们就可以访问项目的url,然后我们会发现在Application/Runtime/目录下生成了~crons.php文件,文件内容如下: [php]viewplain returnarray( 'cron'=> array( 0=>'myplan', 1=>60, 2=>1398160322, ), ); ?> 这样就可以观察结果了!:)
",FILE_APPEND);
";