一尘不染

PHP中的函数超时

php

有没有办法使函数超时?我有10分钟的时间来完成工作。该作业包括一个for循环,这是一个示例:

<?php
foreach($arr as $key => $value){
   some_function($key, $value); //This function does SSH and SFTP stuff
}
?>

$ arr有15个元素,some_function()有时可能需要1分钟以上。实际上,一旦它挂了5分钟。

有没有一种方法可以使函数调用超时并继续处理$ arr中的下一个元素?

谢谢!!


阅读 314

收藏
2020-05-29

共1个答案

一尘不染

这取决于您的实现。PHP中有99%的功能处于阻塞状态。意思是直到当前功能完成,处理才继续。但是,如果函数包含循环,则可以在满足特定条件后添加自己的代码来中断循环。

像这样:

foreach ($array as $value) {
  perform_task($value);
}

function perform_task($value) {
  $start_time = time();

  while(true) {
    if ((time() - $start_time) > 300) {
      return false; // timeout, function took longer than 300 seconds
    }
    // Other processing
  }
}

无法中断处理的另一个示例:

foreach ($array as $value) {
  perform_task($value);
}

function perform_task($value) {
    // preg_replace is a blocking function
    // There's no way to break out of it after a certain amount of time.
    return preg_replace('/pattern/', 'replace', $value);
}
2020-05-29