【问题标题】:How can I delay a php functions for days?如何将 php 函数延迟几天?
【发布时间】:2016-08-25 19:06:48
【问题描述】:

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

喜欢:

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秒。

【问题讨论】:

  • 为什么不用cron作业?
  • 上下文是什么?网页 ?用 PHP CLI 编写的服务?
  • Cron 在大多数情况下是最佳选择。
  • @Mr.Engineer 或者,对于一次性电话,at
  • 将作业放在 RabbitMQ 或 Gearman 等队列系统上,并在使用前有时间限制?

标签: php background wait sleep timing


【解决方案1】:

使用 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】:

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

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

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

    【讨论】:

      【解决方案3】:

      已经提到了 Cron,但还有第二个选项 - 排队。

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

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

      【讨论】:

        猜你喜欢
        • 2016-01-04
        • 2022-01-18
        • 2017-08-07
        • 1970-01-01
        • 2021-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-17
        相关资源
        最近更新 更多