我想要执行一堆代码5秒钟,如果它还没有在指定的时间范围内完成执行,我需要执行另一段代码..
是否有可能?
实施例.. 有两个函数A和B
如果A执行控制的时间超过30秒,则应传递给B
答案 0 :(得分:1)
在功能A期间,您可以定期检查脚本执行的时间,如果超过x秒,则运行B:
function checkTime($start) {
$current = time();
$secondsToExecute = 5;
if (($start+$secondsToExecute) <= $current) {
func_b();
}
}
function func_a($start) {
// do some code
checkTime($start);
// do some code
checkTime($start);
// do some code
}
function func_b() {
// do something else
exit();
}
func_a(time());
答案 1 :(得分:0)
http://php.net/manual/en/features.connection-handling.php
设置时间限制和关闭功能,检查状态是否为2(超时),如果是,则执行您的操作。 需要注意的一点是,以这种方式设置的时间限制只计算实际的php处理时间。使用php等待另一个进程或数据库或http连接等所花费的时间将不计算在内,并且不会考虑达到您的时间限制。
如果你需要计算过去的实际时间,即使它不是php处理时间,你也必须使用上面建议的答案。手动将时间检查插入有意义的地方是最好的,即你知道的内部循环可能运行得太长,甚至可能不是每次迭代但是每N次迭代,等等。或者更通用的方法是使用register_tick_function( ),但这可能会导致一个明显的性能损失与低滴答计数,你必须注意取消注册它或使用适当的标志,这样你不会无限制地启动越来越多的超时处理代码调用超时已经发生了。
其他方法也是可能的,您可以使用pcntl_signal()为某些信号注册处理程序,并在外部程序达到时间限制时将其发送到您的进程(如果您在Linux机器上,则为“man timeout”) )或者你自己的php脚本的fork() - ed实例