如何使用set_time_limit在N秒后停止php脚本?

时间:2016-09-23 10:58:21

标签: php

我有最简单的脚本:

 <?php
if( ini_get('safe_mode') ){
  echo "safe mode !";
}else{
   echo "NOT safe mode !";
}

set_time_limit(3);

for ($i=0;$i<30;$i++) {
    sleep(1);
    echo $i;
}

我有输出 不安全的模式 0123456 ....

为什么我的脚本在3秒后没有停止?

(我在SSH控制台中运行)

2 个答案:

答案 0 :(得分:3)

花费sleep的时间不会计入脚本执行时间。来自the manual

  

set_time_limit()函数和配置指令max_execution_time仅影响脚本本身的执行时间。在确定脚本运行的最长时间时,不会包括在执行脚本之外发生的任何活动,例如使用system()的系统调用,流操作,数据库查询等。在测量时间真实的Windows上,情况并非如此。

答案 1 :(得分:0)

AS @iainn在他的回答中说,set_time_limit()只计算PHP脚本的实际处理时间。因此,在睡觉或等待其他过程时,它不会计入限制。 (在Windows上除外。)

但是,要回答标题中的问题:
为了在“实时”3秒后停止它,只需创建一个包含开始时间(以毫秒为单位)的变量,然后在循环内部进行检查。最好在睡觉前。然后,如果它是&gt;循环中只有break 3000毫秒。 ;)