如果睡眠计算超时或类似的东西,这不是常规问题之一。好的,这就是问题所在:我已经将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;
和结束时间($ _ gEndTime)的计算方式相似 总时间是在我注册的关机功能中计算的:
register_shutdown_function('shutdown');
.............
function shutdown()
{
..............
..............
$_total_time = $_gEndTime - $_gStartTime;
..............
switch (connection_status ())
{
case CONNECTION_NORMAL:
....
break;
....
case CONNECTION_TIMEOUT:
....
break;
......
}
}
注意:我不能使用$ _SERVER ['REQUEST_TIME'],因为我的PHP版本不兼容。那很糟糕 - 我知道。
1)嗯,我的第一个问题显然是为什么我的PHP脚本即使在设置超时限制后也会执行?
2)Apache具有300秒的Timeout指令,但PHP二进制文件不读取Apache配置,这应该不是问题。
3)是否有可能将PHP发送到睡眠模式?
4)我是否以错误的方式计算执行时间?有更好的方法吗?
我在这一点上很难过。 PHP向导 - 请帮忙。
编辑: 我刚刚发现流操作不是几个日志的原因。即使没有执行流操作,延迟在脚本中也是随机的。上下文切换可能就是原因。但我仍然没有明确的答案。我查了Real max_execution_time for PHP on linux,但我不确定我是否想尝试一下。还有其他建议吗?
答案 0 :(得分:7)
max_execution_time
仅限制脚本执行时间本身 - 脚本的 cpu time 。如果操作系统上下文切换到另一个进程并在那里花了一些时间,那么它也不会被计算在内。因此,测量现实世界时间并在30秒后期待超时在任何给定时间都不会成立。当然,它也忽略了任何system
,exec
或网络时间
答案 1 :(得分:0)
如果您需要在一段时间后(根据评论)超时,为什么不打电话
$startscript = microtime();
//do some stuff
if (microtime() - $startscript > 1500)
{
dotimeout();
}
// do more stuff
if (microtime() - $startscript > 1500)
{
dotimeout();
}
// do more stuff
if (microtime() - $startscript > 1500)
{
dotimeout();
}
你得到了这个小说。不是很漂亮,但可能有效。