最新赞助活动温馨提示:自愿赞助服务器费用,学生和没有工作的整站资源免费下载!
头像

Thinkphp定时执行任务

来源:http://www.erdangjiade.com/ 沐浴春风 2016-03-04 08:28浏览(2769)

在项目中我们经常遇到实时更新商品库存,一般解决方案是通过软件或服务器来定时执行任务。本文的DEMO中每隔60秒执行/Home/Index/crons。(ps:不是实时,而是当任何一个用户访问任何一个页面,只要下次访问时间超过60秒,便会执行该控制器方法)

0、请不要问“在不在”之类的问题,有问题直接问!1、学生或暂时没有工作的童鞋,整站资源免费下载!2、¥9.9充值终身VIP会员,加我微信,826096331 拉你进VIP群学习!3、程序员加油,技术改变世界。 在线 充值

Thinkphp定时执行任务
分类:PHP > Thinkphp 难易:高级
查看演示 下载资源: 下载资源 下载积分: 6 积分

官方的ThinkPHP/Library/Behavior/CronRunBehavior.class.php有bug,现已修改

<?php 
 
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 ' . "\r\n"
                    $update = true
                } 
            } 
            if ($update) { 
                \Think\Log::write(implode(''$log)); 
                F('CRON_CONFIG'$crons); 
            } 
        } 
    } 
}

使用方法:

1.把CronRunBehavior.class.php行为类放置在目录:ThinkPHP\Library\Behavior

2.在Application\Common\Conf目录下创建tags.php文件

return array
    'app_begin' => array('Behavior\CronRunBehavior'),     
);

3.Application\Common\Conf\config.php配置如下:

/* 自动运行配置 */ 
    'CRON_CONFIG_ON' => true// 是否开启自动运行 
    'CRON_CONFIG' => array
        '测试定时任务' => array('Home/Index/crons''60'''), //路径(格式同R)、间隔秒(0为一直运行)、指定一个开始时间 
    ),

4.在Application\Home\Controller\IndexController.class.php里增加如下操作,以便测试

public function index() { 
        $contents = file_get_contents("erdangjiade.txt"); 
        $this->assign("contents"$contents); 
        $this->display(); 
    } 
 
public function crons() { 
        file_put_contents("erdangjiade.txt", date("Y-m-d H:i:s") . "\r\n<br>", FILE_APPEND); 
//        echo '执行任务定时任务!'; 
}

提示:

1.每隔60秒访问任何url,再看看根目录erdangjiade.txt有什么变化 2.缓存时间存放在Runtime下,更改时间后,记得删除缓存

标签: 定时任务库存
声明:本文为原创文章,如需转载,请注明来源erdangjiade.com并保留原文链接:https://www.erdangjiade.com/php/712.html
评论3
头像

友情提示:垃圾评论一律封号 加我微信:826096331拉你进VIP群学习群

  • 头像 板凳
    11-10 23:23
    mdgg007
    这个有用好
  • 头像 椅子
    08-19 09:12
    ngu137
    惊喜惊喜强!!!!!!!
  • 头像 沙发
    12-27 23:53
    yyjun
    还不错哦
1 2