如果从服务器获得响应的时间超过 30 秒,cURL 会使 PHP 抛出致命错误。这似乎在我的网络应用程序中发生了很多,尤其是在其他服务器很忙的情况下。用户看到这一点确实不太好。
我想自己捕获超时并显示一条漂亮的消息,或者,我想知道是否有一种方法可以继续使用 PHP 脚本的其余部分,因为即使没有,该脚本的其余部分也可以执行来自服务器的响应(使用默认值)。
老实说,我真的不明白为什么 cURL 会抛出致命错误而不是警告超时。这是一个真正的痛苦。
如果从服务器获得响应的时间超过 30 秒,cURL 会使 PHP 抛出致命错误。这似乎在我的网络应用程序中发生了很多,尤其是在其他服务器很忙的情况下。用户看到这一点确实不太好。
我想自己捕获超时并显示一条漂亮的消息,或者,我想知道是否有一种方法可以继续使用 PHP 脚本的其余部分,因为即使没有,该脚本的其余部分也可以执行来自服务器的响应(使用默认值)。
老实说,我真的不明白为什么 cURL 会抛出致命错误而不是警告超时。这是一个真正的痛苦。
这是对这个问题的稍微更字面的回答。也就是说,curl 仍然会在 30 秒后停止,但您可以捕获错误并继续执行。
ini_set('max_execution_time', 40); // prevents 30 seconds from being fatal
$ch = curl_init();
curl_setopt($ch, CURLOPT_TIMEOUT, 30); // curl timeout remains at 30 seconds
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
curl_exec($ch);
if ($error_number = curl_errno($ch)) {
if (in_array($error_number, array(CURLE_OPERATION_TIMEDOUT, CURLE_OPERATION_TIMEOUTED))) {
print "curl timed out";
}
}
curl_close($ch);
如果您无法控制 max_execution_time,则可以稍微降低 curl 超时。
使用这些参数增加 cURL 超时
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,0);
curl_setopt($ch, CURLOPT_TIMEOUT, 500);
既然你提到了 30 秒,我怀疑你的 PHP 脚本超时时间快用完了。因此,将其添加到您的 PHP 代码中。
set_time_limit(0);// 0 is infite limit