PHP超时不会停止脚本?

时间:2012-08-09 04:06:02

标签: php time timeout max execution

我期待一些错误,如500或超时页面,代码如下:

<?php
      ini_set('max_execution_time',5);
      set_time_limit(5);
      echo 'start';
      sleep(10);
      echo '<br/>hi';

但是,我得到这样的东西:

start
hi

我做错了吗?

我想要的只是在第5秒超时时看到脚本停止,所以不应该执行第二个回声(我知道这是一个非常奇怪的要求)

任何人都可以轻视,谢谢。

PS:似乎sleep()部分非常分散注意力,我怎么改变这样的代码:

<?php
      ini_set('max_execution_time',5);
      set_time_limit(5);
      echo 'start';
      for($i=1;$i<100000000;$i++){
          if($i%100==2) echo $i;
          else echo '--';
      }
      echo '<br/>hi';

1 个答案:

答案 0 :(得分:6)

根据php.net中的这条评论你必须使用unix ... "Please note that, under Linux, sleeping time is ignored, but under Windows, it counts as execution time."(在Unix / Linux中,睡眠不会被考虑作为执行时间的一部分。)

此外,要使其超时,只需永远循环

<?php
while (true) {
    // i'll error out after max_execution_time
}

要查看它有多长,您可以使用microtime找出执行时间,也可以查询刚刚设置的max_execution_time变量。

$max_time = ini_get("max_execution_time");
echo $max_time
?>

<强>更新 使用更新的代码,输出符合预期。

Fatal error: Maximum execution time of 5 seconds exceeded in newfile.php on line 7