巅云智能建站平台搭建版(创业门户版)火爆上线,终身授权!新增:文章智能采集+全站真静态打包+城市分站+智能小程序+非法词过滤+H5自适应+智能链词等功能功能详情
建站资讯News

ThinkPHP框架实现定时执行任务的两种方法分析

0
一佰互联网站建设(www.yinxi.net) 发布时间:2019-04-25 14:40:14 浏览数: 93

本文实例讲述了ThinkPHP框架实现定时执行任务的两种方法。分享给大家供大家参考,具体如下:

在平常的项目中我们总是会遇到需要将某个方法任务定时执行的问题,定时执行方法任务如果我们拥有服务器的权限,我们可以直接在服务器设置定时任务,例如在Windows的任务计划程序中进行设置,在Linux中编写脚本进行执行。如果我们没有服务器权限,我们该如何使用项目的程序代码来自动定时执行呢?接下来就为大家描述一个基于ThinkPHP框架定时执行任务的例子,具体的方法会在下面进行详细的描述。

关于定时执行任务在这里需要提醒的是, 这里描述的方法是被动执行的,也就是说当系统网站产生访问的时候,程序会对比是否达到定时的要求或者说是否达到执行任务的时间来决定是否执行方法任务,如果达到则执行,否则不执行。另外,如果网站没有任何访问和请求则也是同样不执行,如果大家有发现或者知道了如何主动执行定时任务,烦请留言告知,我也学习一下。

1、方法一:v3.2.1

①、ThinkPHP/Library/Behavior/CronRunBehavior.class.php文件

在这里首先要说的就是这个自动执行任务文件,官方所给的这个文件存在BUG,我是用的是v3.2.1版本,后面的版本是否有改正大家可以尝试一下。

<?php/** * ======================================= * Created by WeiBang Technology. * Author: ZhiHua_W * Date: 2016/9/22 0005 * Time: 上午 11:12 * Project: ThinkPHP实现定时执行任务 * Power: 自动执行任务 * ======================================= */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 " . "";          $update = true;        }      }      if ($update) {        ThinkLog::write(implode("", $log));        F("CRON_CONFIG", $crons);      }    }  }}

此段代码已经将bug修复,大家可以将其复制到 “ ThinkPHP/Library/Behavior/CronRunBehavior.class.php ” 文件中进行保存。

②、tgs.php

Application/Common/Conf文件夹中新建tags.php文件,进行标签设置。

<?phpreturn array(    //"配置项"=>"配置值"    "app_begin" =>array("BehaviorCronRunBehavior"),);

③、config.php

Application/Common/Conf文件夹中的config.php文件进行自动运行配置。

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

④、IndexController.class.php

Application/Home/Controller/IndexController.class.php文件中进行定时执行任务的编写。

<?php/** * ======================================= * Created by WeiBang Technology. * Author: ZhiHua_W * Date: 2016/9/22 0005 * Time: 上午 11:20 * Project: ThinkPHP实现定时执行任务 * Power: 自动执行任务方法控制器 * ======================================= */namespace HomeController;use ThinkController;class IndexController extends Controller{  /*  public function index(){  $this->show("<style type="text/css">*{ padding: 0; margin: 0; } div{ padding: 4px 48px;} body{ background: #fff; font-family: "微软雅黑"; color: #333;} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.8em; font-size: 36px }</style><div style="padding: 24px 48px;"> <h1>:)</h1><p>欢迎使用 <b>ThinkPHP</b>!</p></div><script type="text/javascript" src="http://tajs.qq.com/stats?sId=9347272" charset="UTF-8"></script>","utf-8");  }  */  public function index()  {    $contents = file_get_contents("test.txt");    //每次访问此路径将内容输出,查看内容的差别    var_dump($contents);    exit;    $this->assign("contents", $contents);    $this->display();  }  //定时执行的方法  public function crons()  {    //在文件中写入内容    file_put_contents("test.txt", date("Y-m-d H:i:s") . "执行定时任务!" . "<br>", FILE_APPEND);  }}

这样定时执行任务我们就写好了,每隔5秒我们访问任何项目的url,然后查看根目录下的test.txt文件就会发现里面的内容变化。

注意:当你修改间隔时间时会发现没有生效,这是你需要将Runtime/Data文件夹下的缓存文件删除,间隔时间缓存存放在CRON_CONFIG.php文件中。

纯净的项目文件点击此处本站下载。欢迎大家下载指正。

2、方法2:v3.2.2

此方法和方法一没有多大的区别。

①、tags.php

/Application/Common/Conf目录下新建tags.php文件。(此和方法一处一样)

<?phpreturn array(    //"配置项"=>"配置值"    "app_begin" =>array("BehaviorCronRunBehavior"),);

②、crons.php

/Application/Common/Conf目录下新建crons.php文件。(此处和方法一有区别,注意区分。)

<?phpreturn array(    //myplan为我们计划定时执行的方法文件,2是间隔时间,nextruntime下次执行时间    //此文件位于/Application/Cron/目录下    "cron" => array("myplan", 2, nextruntime),);

③、myplan.php

/Application/Common/目录下新建 Cron文件夹,里面新建文件myplan.php文件。

<?phpecho date("Y-m-d H:i:s")."执行定时任务!" . "<br>";

此时我们就可以访问项目的url,然后我们会发现在Application/Runtime/目录下生成了~crons.php文件,文件内容如下:

<?php  return array (    "cron" =>      array (        0 => "myplan",        1 => 60,        2 => 1398160322,      ),  );?>

这样就可以观察结果了!

更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《Zend FrameWork框架入门教程》及《PHP模板技术总结》。

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

一佰互联是全国知名建站品牌服务商,我们有九年网站建设、网站制作、网页设计、php开发和域名注册及虚拟主机服务经验,提供的自助建站服务更是全国有名。近年来还整合团队优势自主开发了可视化多用户”巅云建站系统“3.0平台版,拖拽排版网站制作设计,轻松实现pc站、手机微网站、小程序、APP一体化全网营销网站建设 ,已成功的为全国上百家网络公司提供自助建站平台搭建服务。

上一篇:PHP命名空间与自动加载类详解
下一篇: php 后端实现JWT认证方法示例
[返回新闻列表]

相关新闻more

30
03月
SHOPYY商家如何从速卖通商家一键代发

简介:应用介绍什么是Dropshipping呢?这里分为三个角色:供应商、零售商、客户。简单来说,就是零售商(SHOPYY商户)从供应商(速... >>详情

22
04月
CentOS7 systemd添加自定义系统

systemd:CentOS 7的服务systemctl脚本存放在:/usr/lib/systemd/,有系统(system)和用户(use... >>详情

26
10月
静态页面制作的实现方式与优点

在制作网站的流行的当下,随着用户群体的增加,网站花样也是百花齐放,大多数的公司还是选择静态网页加动态页面的方式,不同种类的网站分别有着不同的... >>详情

11
05月
如何制作一个有流量的网站?网站如何做SEO优

网站要做出来是一件非常容易的事,但要正真做一个有流量的网站就显得不是那么容易了。如果不进行网站SEO优化那么这个网站就是一个花瓶,一个摆设,... >>详情

高端网站建设

美工兼顾SEO,为企业电子商务营销助力!

电话:

023-85725751
建站

产品

域名注册 虚拟主机 云服务器 企业邮局
智能建站 APP打包 微站/小程序 创业平台
网站推广 媒体营销 智能采集 AI机器人
400电话 短信营销 店销机器人
私人定制 门户网站