不使用cron,从上午9点到晚上7点每30分钟运行一次PHP函数

时间:2016-10-26 08:26:28

标签: php

我在移动设备上运行的Web服务器使用同一移动设备上托管的API发送短信。 我希望每天早上9点到晚上7点每30分钟运行一次PHP函数,而不使用cron或任何其他托管服务。

目前我有以下代码

function sleep_until($target_time, $min_sleep = 0) {
    $time_now = time();

    $time_to_target = $target_time - $time_now;

    // If we've already reached the target time, that's fine
    if ( $time_to_target <= $min_sleep )
    {
        // If required, sleep for a bit anyway
        sleep( $min_sleep );
    }
    else
    {
        // Sleep for the number of seconds until the target time
        sleep( $time_to_target );
    }
}

$finished = FALSE;
while ( ! $finished ) {
    $min_secs_per_loop = 1800;
    $min_pause_between_loops = 1200;

    $minimum_start_of_next_loop = time() + $min_secs_per_loop;

    # DO STUFF THAT MAY OR MAY NOT TAKE VERY LONG

    sleep_until( $minimum_start_of_next_loop, $min_pause_between_loops );

    # update $finished when required

}

我怎样才能每天早上9点到晚上7点运行我的while循环?

注意:正如我所提到的,Web服务器正在移动设备上运行,没有互联网连接,也没有可用的crontab。

1 个答案:

答案 0 :(得分:0)

在这种情况下,我主要寻找cron的第三方替代品,您可以在此设备上安装。它会给你带来很多麻烦,因为通过脚本模拟这个很麻烦。

如果不这样做,你需要编写一个控制器脚本,它调用有问题的脚本。此控制器脚本需要将max_execution_time设置为0,运行无限主循环,休眠1小时,并检查时间以查看它是否在参数范围内。
基本上是这样的:

set_time_limit (0);

while (true) {
    $hour = date ('H');

    if ($hour >= 19 && $hour < 9) {
        // Calculate the difference between now and next time to run.
        $diff = time_in_seconds ();
        sleep ($diff);
    }

    exec ($command);

    // Find the number of seconds until the next whole hour.
    $sleep = next_hour ();
    sleep ($sleep);
}

请注意,这是未经测试的,但应该为您提供开始的基础。