原创 2021-04-16 13:18:17

一、简介

最近有个需求就是实现一个定时任务,在每天上午8点给当天生日的员工发送生日祝福,语言为php,框架为thinkphp5,服务器使用的是windows系统。

二、思路

使用tp5的command.php创建一个自定义命令行命令remind。Remind方法执行发送生日祝福的业务逻辑。
创建remind.bat的批处理文件,内容为调用第一步中生成的自定义命令行命令。
在windos服务器,创建批处理任务,每天在8点执行一次第二步中创建的批处理文件。
三、具体实现过程

1.生成自定义命令行命令,remind

(1)配置 命令行工具配置文件,文件位置为project/application/command.php

<?php
//命令类文件的位置
return ['app\admin\command\Remind',];
 

(2)创建命令类文件

<?php
namespace app\admin\command;

use think\console\Command;
use think\console\Input;
use think\console\Output;
use think\Db;
use think\Session;
class Remind extends Command
{
   protected function configure()
{
//setName为定义命令名称
//setDescription定义描述
       $this->setName('remind')->setDescription('Send birthday wishes to employees on their birthday');
   }
//重写execute方法 是用命令最终执行的方法。
   protected function execute(Input $input, Output $output)
   {
       $output->writeln($this->remind_send());
   }

//生日祝福发送的业务逻辑
   protected function remind_send(){
     //数据库存放的为时间戳格式,找到当天生日的用户。
     $sql = "SELECT * FROM `znote_user` WHERE MONTH(FROM_UNIXTIME(birthday,'%Y-%m-%d %H:%i:%s')) = MONTH(NOW()) and DAY(FROM_UNIXTIME(birthday,'%Y-%m-%d %H:%i:%s')) = DAY(NOW())";
    $users = Db::query($sql);
     $email_util = controller('index/email');
     foreach($users as $user){
         $email = $user['email'];
         $content = "尊敬的".$user['username']."先生:<br>  系统检测到今天是您的生日,为您送上诚挚的生日祝福,祝您身体快乐";
         $email_util->sendMail($email,$content,'生日祝福');
     }
    return json_encode($users, true);
   }
}
 

 

(3)检查自定义命令是否可以直接运行

找到项目根目录,在项目根目录中执行php think remind

查看运行结果。

2.创建remind.bat的批处理文件

remind.bat 批处理文件的内容为(根据自己的根目录位置自行更改内容,我的根目录在D盘, D:\phpStudy\PHPTutorial\WWW\note为根目录位置。remind为自定义命令行命令)

d:
cd D:\phpStudy\PHPTutorial\WWW\note
php think remind


3.创建windows定时任务

创建定时任务请参考以下网址,不在做赘述。

https://jingyan.baidu.com/article/154b463130041128ca8f41c7.html
 

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

延伸阅读
  1. Thinkphp5+phpMailer邮件发送功能的实现
发表评论