php写定时器--定时执行

php写定时器–定时执行

public function doTime(){
        ignore_user_abort(true);//设为true浏览器关闭后继续执行
        set_time_limit(0);//设置执行时间,单位是秒。0表示不限制。
        date_default_timezone_set('PRC'); // 切换到中国的时间

        $run_time = strtotime(date('Y-m-d 7:30:00',strtotime('+1 day'))); // 定时任务第一次执行的时间是明天的这个时候

        $interval = 3600*24; // 每24个小时执行一次
        do {
            $gmt_time = microtime(true); // 当前的运行时间,精确到0.0001秒
            $loop = isset($loop) && $loop ? $loop : $run_time - $gmt_time; // 这里处理是为了确定还要等多久才开始第一次执行任务,$loop就是要等多久才执行的时间间隔
            $loop = $loop > 0 ? $loop : 0;
//            if(!$loop) break; // 如果循环的间隔为零,则停止
            sleep($loop);
            $str=date('Y-m-d H:i:s',time())."执行\r\n";
            file_put_contents(ROOT_PATH.'public/timing/'.date('Y-m-d').'.txt',$str,FILE_APPEND);//写入文件
            
			/**
			*逻辑代码
			**/
           
            $loop = $interval;
        } while(true);
    }

可能还有需要改进的地方,后期发现了再补充,嘻嘻。。

2020.9.5补充:
设置定时24小时后执行,只执行了当天一次,以后就不执行了,看日志定时器也在运行,但是中间的逻辑代码不走了,调试了很长时间,得出的结果有可能是24小时运行一次时间太长,改为两分钟运行一次,将当前时间存入表中,然后用设定好的时间做判断,上代码

  		ignore_user_abort(true);//浏览器关闭后继续执行
        set_time_limit(0);//设置执行时间,单位是秒。0表示不限制。
        date_default_timezone_set('PRC'); // 切换到中国的时间

        $interval = 120;

        do {
            $wdata = db("time_set")->find(1);
            $nowdata = date("Y-m-d",time());
            //开始-时间点
            $begin = strtotime(date("Y-m-d 21:30:00",time()));

            $str=date('Y-m-d H:i:s',time())."执行循环--- ".$wdata['t_date']." --".$nowdata."---".$begin."--".time()."-分割线\r\n";
            file_put_contents(ROOT_PATH.'public/timing/'.date('Y-m-d').'.txt',$str,FILE_APPEND);//写入文件

            if(strtotime($nowdata)>strtotime($wdata['t_date']) && time()>$begin ){
                $str=date('Y-m-d H:i:s',time())."进入条件执行-----------分割线\r\n";
                file_put_contents(ROOT_PATH.'public/timing/'.date('Y-m-d').'.txt',$str,FILE_APPEND);//写入文件

                db("time_set")->where("t_id",'1')->update(['t_date'=>date('Y-m-d',time()),'t_createtime'=>time()]);
                file_put_contents(ROOT_PATH.'public/timing/'.date('Y-m-d').'.txt',"执行sql语句".db("time_set")->getLastSql(),FILE_APPEND);//写入文件
          
            }

            sleep($interval);

        } while(true);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值