这并不是关于睡眠是否计入超时等常规问题。好的,这里是问题:我已将PHP的max_execution_time设置为15秒,并且理想情况下,当超过设定限制时应该超时,但实际上没有超时。在更改php.ini文件后,Apache已重新启动,并且ini_get('max_execution_time')也一切正常。有时脚本运行时间长达200秒,这太疯狂了。我根本没有任何数据库通信。脚本所做的所有操作都是在Unix文件系统中查找文件,并在某些情况下重定向到另一个JSP页面。脚本中没有sleep()。
我像这样计算PHP脚本的总执行时间:
在脚本开始时,我设置:
我像这样计算PHP脚本的总执行时间:
在脚本开始时,我设置:
$_mtime = microtime();
$_mtime = explode(" ",$_mtime);
$_mtime = $_mtime[1] + $_mtime[0];
$_gStartTime = $_mtime;
同时,结束时间($_gEndTime)的计算方式也类似。
总时间是在我注册的一个关机函数中计算的:
register_shutdown_function('shutdown');
.............
function shutdown()
{
..............
..............
$_total_time = $_gEndTime - $_gStartTime;
..............
switch (connection_status ())
{
case CONNECTION_NORMAL:
....
break;
....
case CONNECTION_TIMEOUT:
....
break;
......
}
}
注意:由于我的PHP版本不兼容,我无法使用$_SERVER['REQUEST_TIME']。这很糟糕-我知道。
1)那么,我的第一个问题显然是为什么即使设置了超时限制,我的PHP脚本仍在执行?
2)Apache有Timeout指令,为300秒,但PHP二进制文件不读取Apache配置,这不应该是问题。
3)有可能有些东西将PHP发送到睡眠模式吗?
4)我是否以错误的方式计算执行时间?有更好的方法吗?
我现在困惑了。PHP巫师-请帮忙。
编辑: 我刚刚发现流操作并不是原因,通过一些日志可以得知延迟在脚本中是随机的,即使没有执行任何流操作。上下文切换可能只是原因之一。但我仍然没有明确的答案。我查阅了Linux上PHP的真实max_execution_time,但我不确定是否要尝试。还有其他建议吗?
microtime(true)
立即获取一个float
。 - decezeset_time_limit
的文档。"流操作"明确包括在内。 - lonesomeday