6

我想将 PHP 的特定部分限制为 X 秒 - 如果需要更长的时间,请终止当前执行的代码(只是部分,而不是整个脚本)并运行备用代码。

伪代码示例(此处的示例用例是一个不稳定的 API,有时速度很快,有时它是一个黑洞):

$completed = 1;
$seconds = 60;
while ($completed != -1 && $completed < 5) {
    limit ($seconds) {
        $api = new SomeAPI('user','secret','key');
        $data = $api->getStuff('user="bob"');
        $completed = -1;
    } catch () {
        $completed++;
        sleep(10);
    }
}
if ($completed === 5) echo "Error: API black-hole'd 5 times.\n";
else {
    //Notice: data processing is OUTSIDE of the time limit
    foreach ($data as $row) {
          echo $row['name'].': '.$row['message']."\n";
    }
}

但是,这应该适用于任何事情。不仅仅是 API/HTTP 请求。例如,密集的数据库过程。

万一你读得太快:不是set_time_limit答案,因为它们会影响整个脚本的时间限制,而不仅仅是一个部分(当然,除非我对它们的工作方式有误)。max_execution_time

4

1 回答 1

3

对于 API 调用,我建议使用 cURL,您可以为此设置 API 调用的特定超时。

对于一般用途,您可以查看分叉进程,这将使您能够为每个进程计时并在它超过预期时间时终止它。

当然,如果代码段可能由于高度重复的循环结构而导致执行时间较长,您可以提供自己的计时器以在指定的时间间隔后跳出循环。

我可能没有直接回答您的问题,但我真正想要达到的一点是,您可能必须根据代码块的实际作用使用不同的方法。

于 2013-02-20T01:12:28.100 回答