如何创建不可阻挡的while循环, 如果它已经运行不再运行它,我假设如果运行它的脚本将更新数据库中的最后cron时间,脚本将检查当前时间 - 40秒是否小于上一个cron时间。我所拥有的样本,但那是过度循环(一次又一次地运行)谢谢!
<?php
ignore_user_abort(1); // run script in background
set_time_limit(0); // set limit to 0
function processing()
{
//some function here
setting::write('cron_last_time', $time); // write cron last time to database
}
$time = current_timestamp(); // current time
$time_before = $time - 20; //
$settings = setting::read('module_cron_email'); // Get last cron time from database ( in array )
$time_last = $settings['setting_value']; // Last cron time get value from array
if ($time_before < $time_last) // check if time before is less than last cron time
{
do{
processing(); //run our function
sleep(7); // pause for 7 seconds
continue; // continue
}
while(true); // loop
}else{
echo "already running";
die();
}
?>
答案 0 :(得分:5)
启动脚本时,请检查锁定文件。如果确实存在,则退出或跳过循环。如果它不存在,请创建该文件并让它运行。
答案 1 :(得分:-2)
PHP PCNTL就是您所需要的!你可以用它来分叉PHP进程。
while(true) { // Infinite
$pid = pcntl_fork();
switch (pcntl_fork($pid)) {
case -1:
die('Fork failed');
break;
case 0: // Child
processing();
exit(0);
break;
default: // Parent
pcntl_waitpid($pid, $status);
break;
}
}