我正在对服务进行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秒后超时,如果超时则显示错误。
答案 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。