PHP无限循环在60秒后未终止


PHP Infinite Loop Not Terminated after 60 seconds

我创建了一个无限的PHP while循环,该循环增加了一个变量,然后返回:

$num = 1;
while($num >0) {
echo $num . "<br/>";
$num++;
}

我原以为这会在60秒后终止,因为php.ini中的设置如下:

max_execution_time  60  60
max_input_time  60  

如果我错了,很抱歉,但我本以为会在浏览器中看到工作被杀(没有新的回声!)。。。

有人能给我更多关于运行的无限PHP作业的信息吗?当它们在服务器上被杀死时?

您混淆了执行时间和挂钟时间。它们不是一回事。处理器在代码的每个循环上使用的执行时间非常少。它最终会让你超时,但它需要比一分钟更长的时间。

这样想吧,你的处理器可能在2GHz下运行。你认为做一个循环需要多少条指令?echo上的时间很大(即较慢),并且不计入处理器执行时间。

//using set_time_limit 
// starting php code here
echo "starting...'n"; 
// set_time_limit(10); //either would work
ini_set("max_execution_time", 10); //either would work

function doSomeExpensiveWork($currentTime){
  for ($r = 0; $r < 100000; $r++){ 
    $x =  tan(M_LNPI+log(ceil(  date("s")*M_PI*M_LNPI+100))); 
  } 
}
try{
  while(true)
  { 
      $currentTime = date("H:m:s"); 
      echo $currentTime, "'n";
      doSomeExpensiveWork($currentTime);
  } 
} catch (Exception $e) {
  //echo 'Caught exception: ',  $e->getMessage(), "'n";
}
echo "this will not be executed! $x"; 
// code end