函数,它在后台等待大约一天,然后执行另一天。
类似:
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。