5秒后超时PHP功能

时间:2015-12-10 20:16:37

标签: php post timer

我正在对服务进行API调用,并且需要在5秒后超时调用并将其视为“失败”,然后继续执行代码。如果它超时,我想将它保存到$ timeoutResult变量,然后将其一直传递回javascript(我可以做这部分)。

我只是不确定如何在PHP中执行定时功能。我在set_time_limit(5)上看过文档,但我不知道怎么做?

例如:

$response = $api_calls->apiCall($endpoint, $data);如果这需要> 5秒,我希望它退出/将调用视为“失败”,然后继续进行我的错误处理代码。

我不确定如何通过将其视为失败并继续执行来停止执行该功能。

这样的事情会起作用吗?

set_time_limit(5);
$response = $api_calls->apiCall($endpoint, $data);
set_time_limit(0);

这样我设置了一个超时(在函数内部调用此函数时开始),它会尝试执行,如果完成它,则将时间设置回无穷大?

apiCall()中的cURL设置标准超时为10秒,但对于这个特定的调用,我需要它在5秒后超时,如果超时则显示错误。

2 个答案:

答案 0 :(得分:0)

我在我的apiCall()函数中添加了一个附加参数,该函数接受一个数组。

然后我使用

循环遍历此数组
if(isset($extra_curl_options) && $extra_curl_options.length > 0){
    foreach($extra_curl_options AS $k => $v) {
        $http_request->setOption(constant($k), $v);
    }
}

这将允许我将多个curl选项传递给apiCall以供将来使用。

答案 1 :(得分:0)

你没有显示实际进行api调用的代码!

虽然可以设置监视程序计时器(SIGALRM),但这只是POSIX系统上的一个选项,并且只有在CLI sapi中运行时才会出现。

你提到代码使用curl。这有很多控制超时的选项 - 手册中的_CONNECTTIMEOUT [_ MS],_ LOW_SPED_LIMIT,_LOW_SPEED_TIME和_TIMEOUT [_MS]全部documented