thinkphp- CronRunBehavior.class.php如何使用?

来源:互联网 发布:java crm项目介绍 编辑:程序博客网 时间:2024/05/22 02:26

thinkphp计划任务使用cronRun

1、先不管是是否是独立分组,必须在你项目名下的Conf文件夹内创建2个文件一个是tages.php 一个是 crons.php。

注意这两个文件名为thinkphp标准文件名,不可以改变


tages.php内容是:

 <?php return array(    'app_end'=>array('CronRun'), // 定时任务,thinkphp固定名称,不可以改变 ); ?>

crons.php内容是

 <?php return array(    'cron_1' => array('recommend', 60), //这里的意思是每隔60秒,执行一次recommend.php文件 ); ?>

2、在项目命的Lib文件夹内,新建一个文件夹Cron,然后再在Cron里面创建recommend.php文件,我们在recommend.php文件里面写需要执行的内容。直接写PHP代码就可以

recommend内容是

 <?phpecho "欢迎光临本站,现在时间是:".date('Y-m-d H:i:s',time()."--定时任务demo"); ?>

 

3、结果:

您好,欢迎光临本站,现在时间是:2014-05-16 10:33:49

该文字显示在网站的所有页面,但是不能刷新浏览器页面

实际开发中,可以再任务脚本中调用远程数据,执行PHP支持的功能操作等。



1.定时任务行为文件CronRunBehavior.class.php的使用,请到thinkphp官网下载。

    这里笔者入口文件定义的扩展文件目录是:define('EXTEND_PATH', APP_PATH . 'Extend/');
    所以定时任务行为文件拷贝至:app/Extend/Behavior/CronRunBehavior.class.php
2.在Config目录下定义任务配置文件crons.php(注意此名称为硬编码,名称必须是crons.php)
   这个定时任务配置文件之所以要这么配置,可参考CronRunBehavior.class.php源码得知:
        if(is_file(RUNTIME_PATH.'~crons.php')) {
            $crons    =    include RUNTIME_PATH.'~crons.php';
        }elseif(is_file(CONF_PATH.'crons.php')){
            $crons    =    include CONF_PATH.'crons.php';
        }
    另外,这里的Config目录,默认是项目下的Config目录,默认指定方式的源码是:
    defined('CONF_PATH')    or define('CONF_PATH',  APP_PATH.'Conf/'); // 项目配置目录
    如果我们在入口文件index.php有指定的配置目录,则应是入口文件定义的目录:
    例如:
    define('CONF_PATH',  'myapp/config/');
    crons.php的文件内容如下:
    return array(
    'cronname'=>array('filename',intervals,nextruntime),...
    );
    * cronname是任务名称,主要是日志记录使用,好知道执行了哪些任务
    * filename是脚本文件名,全部放在Lib/Cron/下面,
     为什么规定放到这个目录,可参考CronRunBehavior.class.php源码:
     include LIB_PATH.'Cron/'.$cron[0].'.php';
     即解析为:include 'app/lib/filename.php';
     filename.php 里面可编写一些需要执行的代码。如自动完成一些数据修改等。
    * intervals是任务执行间隔时间,UNIX时间戳类型
    * nextruntime是第一次或下一次执行时间 UNIX时间戳类型
    
3.thinkphp如何启动定时任务呢?
   CronRunBehavior.class.php 是thinkphp的行为的一种,必须通过某一种行为方式促发才能执行。
   这里我们通过Thinkphp核心包目录Conf/tags.php来配置。
   在tags.php里面,我们配置这个选项:'action_begin'  =>  array('CronRun',),
   当任何用户访问我们的项目时,必然会先执行action。即促发一个action_begin行为。
   这个行为会找到CronRunBehavior.class.php这个文件,并执行里面的run方法。
   建议使用者读下这个run方法的执行逻辑。
   
   总结:CronRunBehavior.class.php的定时任务执行并不是精准的,它必须通过行为来促发。
   即,如果没有用户访问我们的APP。 那定时任务就不会被促发,也就是说我们设置的intervalsTime
   时间,是最小间隔时间。当用户访问我们的APP的时间超过上次定时任务执行的时间差大于intervalsTime时,
   才会促发定时任务的实际执行。
   本回答由酷城网www.kuucen.com原创,转载请注明出处。
0 0
原创粉丝点击