如何将php函数延迟几天



函数,它在后台等待大约一天,然后执行另一天。

类似:

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

或者可能是这样的(这是虚构的):

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

有好的解决方案吗?

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

使用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秒,然后超时。

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

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

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

Crons已经被提及,但还有第二个选项-排队。

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

有各种各样的队列软件可用,从您自己安装的Beanstalk或RabbitMQ,到云中托管的AmazonSQS或IronMQ。

最新更新