功能,在后台等待大约一天,然后执行另一个。
像:
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秒。
答案 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等云中的托管软件。