php怎么做定时任务

定时任务,顾名思义,到点干活.按照这个思路,我们往下走:

  1. 怎么让PHP进程一直跑下去?死循环,只有方法一直执行,我们才能判断在什么时候做什么事.直接粘贴代码

    // 休眠时间

    $sleep_time = 60;

    // 进行休眠

    sleep($sleep_time);

    //调用自己

    $url = “http://”.$_SERVER[‘HTTP_HOST’].$_SERVER[‘REQUEST_URI’];

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $url);

    curl_setopt($ch, CURLOPT_TIMEOUT, $url);

    curl_setopt($ch, CURLOPT_USERAGENT, _USERAGENT_);

    curl_setopt($ch, CURLOPT_REFERER, _REFERER_);

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    $res = curl_exec($ch);

    curl_close($ch);

    友情提示,千万别把这段粘贴就执行,千万别执行,后面会讲原因.如果手快执行了,重启服务器可以停止这个进程

  2. 大家都知道php是单线程的,这边死循环了,其他的页面方法都会被阻塞不能访问.具体原因我记不太清,大体意思是,第一个操作session的进程锁定,导致其他请求阻塞,所以我们要解锁

    session_write_close();           //session解锁

  3. 虽说是死循环,但也不能让它跑到cpu炸掉.我们要加个控制,我这里用的方法是,读取一个文件的内容,判断内容来决定循环的执行与否

    public function test(){

    set_time_limit(0);      //不受php文件的执行时间限制

    session_write_close();           //session解锁

    //用于控制定时任务的死循环

    $notice_task = file(‘./notice_task.txt’)[0];   //1启用  0弃用

    if (trim($notice_task) == 1) {     //判断是否为1

    $time = 60;

    sleep($time);

    //调用自己

    $url = “http://”.$_SERVER[‘HTTP_HOST’].$_SERVER[‘REQUEST_URI’];

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $url);

    curl_setopt($ch, CURLOPT_TIMEOUT, $url);

    curl_setopt($ch, CURLOPT_USERAGENT, _USERAGENT_);

    curl_setopt($ch, CURLOPT_REFERER, _REFERER_);

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    $res = curl_exec($ch);

    curl_close($ch);

    } else {

    echo ‘定时任务暂停’;

    }

    }

  4. 最后,怎么样调用这个方法.我是做成一个开关,控制这个定时任务的起停,接着上代码

    public function changeStatus(){

    if(IS_AJAX){

    $status = I(‘post.status/d’);

    $file_data = 0;

    if($status == 1){

    $file_data = 1;

    }

    $res = file_put_contents(‘./notice_task.txt’,$file_data);     //写入

    if(!$res){

    $this->ajaxReturn([‘code’=>1,’msg’=>’写入失败’]);

    }

    if($file_data){

    $this->test();

    $msg = ‘开启定时提醒功能成功!’;

    }else{

    $msg = ‘关闭定时提醒功能成功!’;

    }

    $this->ajaxReturn([‘code’=>1,’msg’=>$msg]);

    }

    }

代码粘贴到这里,如果你使用得过程中碰到解决不了的问题,欢迎留言

文章来源于互联网:PHP怎么做定时任务

© 版权声明
THE END
喜欢就支持以下吧
点赞0
分享
评论 抢沙发