我怎么能延迟PHP函数几天?

时间:2016-04-30 18:01:40

标签: php background wait sleep timing

功能,在后台等待大约一天,然后执行另一个。

像:

function Sleep(){
    sleep( /* One Day */ );
    Run();
}
function Run(){
    //One Day later,
    //execute code.
}

或maby这样的事情(这是虚构的):

class Waiter extends Timer{
    $time = 0;
    function __construct($time){
        $this->time = $time;
    }
    function onDelay(){
        //One day Later.
    }
}
$wait = new Waiter( /* One Day */ );

有一个很好的解决方案吗?

或者sleep()函数也是okey? 但我不得不说,执行超时是30秒。

3 个答案:

答案 0 :(得分:0)

正如你所说,执行时间是30秒,整个脚本在30秒后被迫结束。它不能再等了。

如前所述,您可以使用cron作业。

如果您的问题不是经常性的重复出现,您可以编写一个小脚本,它将函数执行时的时间(包括日期)写入文件(或数据库)。然后cron将每小时执行一次(或者如果重要的话,每分钟执行一次)并检查是否需要执行该函数

答案 1 :(得分:0)

使用 cronjob 是您问题的正确解决方案。如果由于某种原因您无法使用它,请确保在php脚本上使用ignore_user_abort(1)set_time_limit(0);

int ignore_user_abort ([ bool $value ] )
  

当运行PHP作为命令行脚本时,脚本的tty会运行   没有脚本被终止然后脚本将死亡   下次尝试写入任何内容时,除非将值设置为TRUE

bool set_time_limit ( int $seconds )
  

设置允许脚本运行的秒数。如果是这样的话   到达后,脚本返回致命错误。默认限制为30   秒,或者,如果存在,则定义的max_execution_time值   php.ini中。

     

调用时,set_time_limit()从零重新启动超时计数器。   换句话说,如果超时是默认的30秒,那么25   在脚本执行的几秒钟内,调用如set_time_limit(20)   制作完成后,脚本将在超时前运行45秒。

答案 2 :(得分:0)

已经提到过Crons,但还有第二种选择 - 排队。

https://en.wikipedia.org/wiki/Message_queue

有各种各样的队列软件可供选择,从像Beanstalk或RabbitMQ那样自己安装的队列软件到亚马逊SQS或IronMQ等云中的托管软件。