头像

Thinkphp定时执行任务【原创

来源:http://www.sucaihuo.com/php/712.html 素材火管理员 2016-03-04 08:28浏览(9352) 收藏

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

程序员,你不是一个人;网站开发QQ群:698377651,在线充值,或联系QQ3401083589直接充值

查看演示 下载资源: 184 下载资源 下载积分: 76 积分

官方的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("sucaihuo.txt");
        $this->assign("contents", $contents);
        $this->display();
    }

public function crons() {
        file_put_contents("sucaihuo.txt", date("Y-m-d H:i:s") . "\r\n<br>", FILE_APPEND);
//        echo '执行任务定时任务!';
}

提示:

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

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

系统已开启自动识别垃圾评论机制,识别到的自动封号,下载出错或者资源有问题请联系全栈客服QQ 3401083589

  • 头像 29楼
    08-09 16:44
    迷***茫
    正是我现在需要的东西,下下来看看。
  • 头像 28楼
    05-20 16:22
    yo***ou
    到时学习下,会用到,不错。
  • 头像 27楼
    01-09 09:16
    小***泉
    不错,参考一下。。。
  • 头像 26楼
    11-19 05:16
    Fo***便你
    这个实例很有用
  • 头像 25楼
    11-13 15:57
    bu***ei
    我看了一个类似的代码,再参考下这个
  • 头像 24楼
    08-01 08:07
    gz***12
    关了浏览器试试
  • 头像 23楼
    07-15 14:20
    xu***yi
    超级实用!!!!
  • 头像 22楼
    06-05 10:43
    76***62
    关了浏览器就不能了吧
  • 头像 21楼
    05-31 16:52
    ou***yi
    看上去挺好挺实用的啊
  • 头像 20楼
    05-25 10:35
    55***55
    这个好用不呀
1 2