PHP max_execution_time没有超时

Joe*_*iel 5 php apache

如果将睡眠计算为超时或类似的东西,这不是常规问题之一.好的,这就是问题所在:我已经将PHP的max_execution_time设置为15秒,理想情况下,当它超过设定限制时应该超时,但事实并非如此.在更改为php.ini文件后,Apache已重新启动,并且ini_get('max_execution_time')一切正常.有时脚本运行最多200秒,这很疯狂.我没有任何数据库通信.所有脚本都在查找unix文件系统上的文件,并在某些情况下重定向到另一个JSP页面.脚本上没有sleep().

我计算PHP脚本的总执行时间,如下所示:

在脚本的开头我设置:

$_mtime = microtime();  
$_mtime = explode(" ",$_mtime);
$_mtime = $_mtime[1] + $_mtime[0]; 
$_gStartTime = $_mtime;
Run Code Online (Sandbox Code Playgroud)

并且类似地计算结束时间($ _ gEndTime).
总时间是在我注册的关机功能中计算出来的:

register_shutdown_function('shutdown');
.............
function shutdown()
{
   ..............
   ..............
   $_total_time = $_gEndTime - $_gStartTime;
   ..............
   switch (connection_status ())
    {
    case CONNECTION_NORMAL:
      ....
      break;
      ....
    case CONNECTION_TIMEOUT:
      ....
      break;
      ......
    }
} 
Run Code Online (Sandbox Code Playgroud)

注意:我不能使用$ _SERVER ['REQUEST_TIME']因为我的PHP版本不兼容.那很糟糕 - 我知道.

1)嗯,我的第一个问题显然是为什么我的PHP脚本甚至在设置超时限制后仍然执行?
2)Apache具有300秒的Timeout指令,但PHP二进制文件不读取Apache配置,这应该不是问题.
3)是否有可能将PHP发送到睡眠模式?
4)我是否以错误的方式计算执行时间?有一个更好的方法吗?


我在这一点上很难过.PHP向导 - 请帮忙.

编辑:我刚刚发现流操作不是几个日志的原因.即使没有执行流操作,延迟在脚本中也是随机的.上下文切换可能就是原因.但我仍然没有明确的答案.我在Linux上查找了PHP的max max_execution_time, 但我不确定我是否想尝试一下.还有其他建议吗?

pon*_*cha 7

max_execution_time仅限制脚本执行时间本身 - 脚本的CPU时间.如果操作系统上下文切换到另一个进程并在那里花了一些时间,那么它也不会被计算在内.因此,测量现实世界时间并在30秒后期待超时在任何给定时间都不会成立.当然,它忽略任何system,exec或网络时间以及

  • 确实..即使等待数据库查询或处理数据流也不在等式之内 (2认同)