一:开发手册:https://www.kancloud.cn/manual/thinkphp5_1/354146
1.根据个人需求在某个模块下建立command文件夹,与controller文件夹同级。新建php文件,命名随意。
Task.php:
<?php
namespace app\index\command; //命名空间要注意
use think\console\Command;
use think\console\Input;
use think\console\Output;
class Task extends Command{
protected function configure(){
$this->setName('Task')->setDescription("测试");
//这里的setName和php文件名一致,setDescription随意
}
/*
* 报表-全局统计
*/
protected function execute(Input $input, Output $output)
{
//这里写业务逻辑.推荐使用方法调用的形式。例如模型中的方法
$output->writeln("Hello"); //输出测试
}
}
2.找到项目中command.php文件
<?php
return [
'app\index\command\Task' //指向定时任务的文件
];
3.创建.bat 文件(随便新建一个txt文件,写入以下代码。注意路径需要更换成你的项目路径)
D: //进入D盘
cd \PhpStudy\PHPTutorial\WWW\qp_huskar //cd 命令后面是项目文件根目录
D:\PhpStudy\PHPTutorial\php\php-7.2.1-nts\php.exe think EnvelopeOrderTaskk // 用php.exe打开think Task任务
二 .这样算是基本完成。接下来进入测试阶段。 两种测试方式。
测试的时候遇到一个天坑!!。我在安装redis的时候。在php.ini中开启了php_igbinary.dll扩展。在测试定时任务的时候一直报错这个扩展模块找不到。但是我回头去检查PHP文件中明明存在这个扩展。最后才发现原来这个扩展是为了给redis加速,并且这个扩展没有对应当前PHP版本,所以一直报错!。后来屏蔽这个扩展后就正常!!!
1.进入项目根目录 shift+鼠标右键, 打开 '在此处打开命令行' ,输入php think Task(文件名)
2. windos 创建定时任务
操作这边需要注意:起始于这个参数如果不填有时候会出现权限问题,找不到文件。
三:还有一种不使用Command的定时任务。可以用.bat或ssh 直接指向某个方法。(百度上有我就不贴了)