php写的一个简单的计划任务

网站技术 ayflying 738℃ 评论

有的时候计划任务可能需要涉及到服务器的操作,如果是一些虚拟主机的用户可能没有此操作权限,现在就要写一个简单的计划任务脚本进行执行操作。

当前程序会在人访问的时候可以触发,因此需要全站操作都可以运行该方法。

数据库的结构已经在代码中列出了,一个表就可以完成了


/*计划任务*/
    protected function plan(){
        $sql = Db::name('syetem_plan') -> where('nextrun',' cache(true) -> find();
        if(empty($sql)){
            return;
        }
        //初始化时间到当前凌晨
        $nextrun = strtotime('00:00');
        /*
        //数据库结构
        $sql = [
            "id" => 1,
            "lastrun" => 0,
            "nextrun" => 0,
            "weekday" => -1,
            "day" => -1,
            "hour" => 1,
            "minute" => 15,
        ];
        */
        
        $str = '+';
        if($sql['day'] >= 0){
            $day = $sql['day'] -1;
            $nextrun = strtotime(date('Y-m').'-1 00:00');
            $str .= '1 month '.$day." day "; 
        }elseif($sql['weekday'] >= 1){
            $weekday = ['','monday','tuesday','wednesday','thursday','friday','saturday','sunday'];
            $day = $weekday[$sql['weekday']];
            $str = 'next '.$day.' ';
            //$nextrun = strtotime('next ',$time);
        }
        
        if($sql['hour'] >= 0){
            $str .= '1 day ';
            $str .= $sql['hour'].' hour ';
            //$nextrun =  strtotime($str,$nextrun);
        }
        
        if($sql['minute'] >= 0){
            if($sql['hour'] < 0){
                $str .= date('H')+1;
                $str .= ' hour ';
            }
            $str .= $sql['minute'].' minute';
        }
        
        
        
        //TOD 以下部分为需要执行的任务,
        
        
        //写入数据库更新时间
        $nextrun = strtotime($str,$nextrun);
        $data = [
            'lastrun' => time(),
            'nextrun' => $nextrun,
        ];
        Db::name('syetem_plan') -> where('id',$sql['id']) -> update($data);
        
        return;
    }


转载请注明:七彩悠悠博客 | 心悠悠 情悠悠 » php写的一个简单的计划任务

高效,专业,悠悠博客

联系我们