如何检查函数执行时间并返回执行时间是否超过10秒

时间:2018-08-01 21:49:25

标签: php laravel

我有一个功能,想计算总执行时间。如果执行时间超过10秒,则从函数返回并中断循环。

我有代码来计算执行时间,但是如果执行时间超过10秒,我将无法获得返回的信息。

for($i=0;$i<5;$i++) {

  $time_start = microtime(true);

 //call funtion
 show(10);

 $time_end = microtime(true);

 //Total execution time
 $total_time = $time_end - $time_start;
 echo "Exe Time: ". $total_time;
}


function show() {
    sleep(4);
}

1 个答案:

答案 0 :(得分:2)

不幸的是,超时错误无法在php中捕获,但是您几乎可以通过简单的math&microtime()来做到这一点,

function f(int max_execution_time=10){
$starttime=microtime(true);
//do stuff here
if((microtime(true)-$starttime) > $max_execution_time){
    return ETIMEDOUT;
}
//do more stuff here
if((microtime(true)-$starttime) > $max_execution_time){
    return ETIMEDOUT;
}
// and more stuff here, and repeat
if((microtime(true)-$starttime) > $max_execution_time){
    return ETIMEDOUT;
}    
// and finally, 
return SUCCESS;
}

只要您认为合适,只要检查它是否应该超时。这不是很准确,因为您不能为大多数函数设置时间限制(例如,如果您的函数正在调用file_get_contents(),则不能为file_get_contents()设置时间限制,而不能使用set_time_limit(),而是由set_time_limit生成的错误)无法捕获,将终止整个php脚本:()