php实现逢3过,thinkPHP3.2定时任务

前言

以下本文介绍的定时任务的方法是采用缓存的方式,访问才执行任务的!

定时任务配置应用公共配置目录下新建crons.php

即在Application/Common/Conf/crons.phpreturn array(

'cronname'=>array('filename',intervals,nextruntime),

);

//cronname是任务名filename是任务文件名intervals间隔时间nextruntime下次执行时间

//例如

return array(

'cron_1'=>array('myplan',86400,1396195200),

);

//1396195200-2014年3月31日0时0分0秒开始执行任务

//86400每天执行一次

//执行的任务文件为myplan.php

//任务名为cron_1新建任务文件,公共模块目录下新建Cron目录

该文件夹里面放执行任务的php处理文件。添加行为扩展应用公共配置目录下配置tags.php

文件位置在:Application/Common/Conf/tags.php,如果没有这个文件可以新建一个。return array (

'app_end' => array ('Behavior\CronRunBehavior'),

);

//app_end应用结束标签位,当然也可以是app_begin

附上CronRunBehavior的代码<?php

// +----------------------------------------------------------------------

// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]

// +----------------------------------------------------------------------

// | Copyright (c) 2009 http://thinkphp.cn All rights reserved.

// +----------------------------------------------------------------------

// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )

// +----------------------------------------------------------------------

// | Author: liu21st

// +----------------------------------------------------------------------

namespace Behavior;

use Think\Behavior;

defined('THINK_PATH') or exit();

/**

* 自动执行任务

* @cateGOry Extend

* @package Extend

* @subpackage Behavior

* @author liu21st

*/

class CronRunBehavior extends Behavior {

protected $options = array(

'CRON_MAX_TIME' => 60, // 单个任务最大执行时间

);

public function run(&$params) {

// 锁定自动执行

$lockfile = RUNTIME_PATH.'cron.lock';

if(is_writable($lockfile) && filemtime($lockfile) > $_SERVER['REQUEST_TIME'] - C('CRON_MAX_TIME')) {

return ;

} else {

touch($lockfile);

}

set_time_limit(1000);

ignore_user_abort(true);

// 载入cron配置文件

// 格式 return array(

// 'cronname'=>array('filename',intervals,nextruntime),...

// );

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';

}

if(isset($crons) && is_array($crons)) {

$update = false;

$log = array();

foreach ($crons as $key=>$cron){

if(empty($cron[2]) || $_SERVER['REQUEST_TIME']>=$cron[2]) {

// 到达时间 执行cron文件

G('cronStart');

include LIB_PATH.'Cron/'.$cron[0].'.php';

$_useTime = G('cronStart','cronEnd', 6);

// 更新cron记录

$cron[2] = $_SERVER['REQUEST_TIME']+$cron[1];

$crons[$key] = $cron;

$log[] = "Cron:$key Runat ".date('Y-m-d H:i:s')." Use $_useTime s\n";

$update = true;

}

}

if($update) {

// 记录Cron执行日志

\Think\Log::write(implode('',$log));

// 更新cron文件

$content = "<?php \nreturn ".var_export($crons,true).";\n?>";

file_put_contents(RUNTIME_PATH.'~crons.php',$content);

}

}

// 解除锁定

unlink($lockfile);

return ;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值