如果从服务器获取响应需要超过30秒,则cURL会使PHP抛出致命错误。这似乎在我的网络应用程序中发生了很多,特别是如果其他服务器很忙。用户真的不太明白。
我想要捕获超时并自己显示一个很好的消息,或者,我想知道是否有一种方法可以继续使用其余的PHP脚本,因为该脚本的其余部分即使可以执行服务器没有响应(默认值)。
我真的不明白为什么cURL会抛出一个致命错误而不是一个警告,说实话。这是一个真正的痛苦。
答案 0 :(得分:6)
这是对这个问题的一个更直接的答案。也就是说,卷曲在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,你可以稍微降低卷曲超时。
答案 1 :(得分:4)
使用这些参数
增加cURL超时curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,0);
curl_setopt($ch, CURLOPT_TIMEOUT, 500);
由于您提到30秒,我怀疑您的PHP脚本超时已用完。所以将它添加到PHP代码中。
set_time_limit(0);// 0 is infite limit