我在移动设备上运行的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。
答案 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);
}
请注意,这是未经测试的,但应该为您提供开始的基础。