×

thinkphp3.2计划任务

thinkphp3.2计划任务(thinkphp5任务队列)

admin admin 发表于2023-03-29 17:09:09 浏览68 评论0

抢沙发发表评论

本文目录一览:

php如何实现定时任务,php定时任务方法,最佳

PHP制作定时任务(也称计划任务)的方法,大概分为2种:

现在基本所有的PHP框架,如:ThinkPHP,Yii,Laravel等等;它们都是单入口的形式,也就是说所有的请求都集合到index.php中,然后再由框架核心来根据请求参数的不同来分配到不同的控制器当中。基于单入口的形式,那么就可以做基于行为(例如TP3.2)或者说基于事件的定时任务。

系统自动的定时任务,比如Linux的crontab,windows的计划任务等。

两中方法各有所长各有所短

基于事件:这种利用的是框架本身提供的一些行为来实现,优点是:不需要特殊配置,只要项目能跑起来,那么定时任务也能执行。缺点是:灵活性比较差,必须要借助框架实现。

基于系统:基于操作系统来实现,优点是:灵活性很高,而且可控性也很好。缺点是:需要特殊配置,专业要求性比较强。

具体要使用哪种方法,可以依据自己的能力和项目需要来选择。最后附上TP3.2的定时任务配置,这个只需要配置就可以,如果想查看具体实现原理,可以查看/ThinkPHP/Library/Behavior/CronRunBehavior.class.php-thinkphp3.2计划任务

第一步:/Application/Common/Conf目录下新建两个文件:

分别如:

/Application/Common/Conf/tags.php

/Application/Common/Conf/crons.php

1) 新建 tags.php,编辑内容如下:

return array(

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

);

2) 新建 crons.php ,编辑内容如下:

return array(

'cron_1' = array('myplan', 1),

);

第二步:/Application/目录下新建 Cron文件夹,里面新建文件myplan.php文件

路径如:/Application/Cron/myplan.php

编辑内容如下:

echo 11111;

查看是否运行成功,最简单的方法是查看/Application/Runtime/~crons.php,这个文件是否存在。

thinkphp中怎么实现后台执行任务

ThinkPHP实现定时执行任务的两种方法

1、方法一:v3.2.1

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

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

[php] view plain

?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 ' . "\r\n"; -thinkphp3.2计划任务

                  $update = true;

              }

          }

          if ($update) {

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

              F('CRON_CONFIG', $crons);

          }

      }

  }

}

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

②、tgs.php

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

[php] view plain

?php

return array(

  //'配置项'='配置值'

  'app_begin' =array('Behavior\CronRunBehavior'),

);

③、config.php

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

[php] view plain

?php

return 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] view plain

?php

/**

* =======================================

* Created by WeiBang Technology.

* Author: ZhiHua_W

* Date: 2016/9/22 0005

* Time: 上午 11:20

* Project: ThinkPHP实现定时执行任务

* Power: 自动执行任务方法控制器

* =======================================

*/

namespace Home\Controller;

use Think\Controller;

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 }/stylediv style="padding: 24px 48px;" h1:)/h1p欢迎使用 bThinkPHP/b!/p/divscript type="text/javascript" src="" charset="UTF-8"/script','utf-8');-thinkphp3.2计划任务

  }

  */

  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") . "执行定时任务!" . "\r\nbr", FILE_APPEND);

  }

}

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

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

       纯净的项目文件下载地址: 欢迎大家下载指正。

2、方法2:v3.2.2

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

①、tags.php

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

[php] view plain

?php

return array(

  //'配置项'='配置值'

  'app_begin' =array('Behavior\CronRunBehavior'),

);

②、crons.php

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

[php] view plain

?php

return array(

  //myplan为我们计划定时执行的方法文件,2是间隔时间,nextruntime下次执行时间

  //此文件位于/Application/Cron/目录下

  'cron' = array('myplan', 2, nextruntime),

);

③、myplan.php

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

[php] view plain

?php

echo date("Y-m-d H:i:s")."执行定时任务!" . "\r\nbr";

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

[php] view plain

?php

  return array (

      'cron' =

          array (

              0 = 'myplan',

              1 = 60,

              2 = 1398160322,

          ),

  );

?

      这样就可以观察结果了!

thinkphp3.2.3如何每30分钟自动执行controller下的方法,这个是主动的,不需要访问,本人操作系统是win10

linux系统用crontab 定时每30分钟执行一次php脚本

windows系统用计划任务 定时每30分钟执行一次php 脚本

下面是wind7的截图,window10你自己查下

tp3.2框架定时任务怎么访问php

thinkphp 3.2.3 计划任务具体实现实例教程

很多情况下,我们网站都会用到计划任务即定时更新做一些处理,类似Discuz后台的计划任务,比如更新每日发帖数目等等!

这里TP也是可以实现的,首先在应用公共配置目录下新建crons.php,写入:

1

2

3

4

?php

return array(

'cron_1' = array('Uploads', 1),//行为扩展

);

参数说明:

1

2

3

4

5

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

//cronname是任务名

filename是任务文件名

intervals间隔时间

nextruntime下次执行时间

然后同样在应用公共配置目录下新建tags.php,写入:

1

2

3

4

?php

return array(

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

);

然后在应用公共目录下新建Cron目录,用户存放一些计划任务的具体操作代码,如上在Cron目录下新建Uploads.php文件用于处理cron_1这个定时任务的处理!

注意这里是写在公共配置文件里面的,如果你想单独的给某个分组来执行此计划任务,则可以写在分组的配置文件中!

thinkphp 3.2 cli.php计划任务报错怎么查

你的php版本是不是该升级了,ThinkPHP是3.2版本要求PHP5.3以上版本。

thinkphp3.2.3 微信开发怎么缓存access

直接将access_token存库即可,服务端写定时执行程序,每2个小时以内获取更新一次,因为每个access_token的有效期只有2个小时!

1、windows可以用计划任务做定时程序。

2、linux可以用crontab做定时任务。

3、还可以用各大主机运营商的云监控触发服务端获取行为。