我使用curl来调用Web服务API。该服务可以无响应,所以我想设置超时。当我使用CURLOPT_TIMEOUT时,事情按预期工作。但是当我使用CURLOPT_TIMEOUT_MS(注意'MS'为毫秒)时,超时似乎根本没有启动。 php.net告诉我,后者自PHP 5.2.3版本开始可用,我使用的是5.2.6。
为什么会发生这种情况?
感谢。
代码片段:
$c = curl_init();
curl_setopt( $c, CURLOPT_URL, $call );
curl_setopt( $c, CURLOPT_HTTPHEADER, $headers);
curl_setopt( $c, CURLOPT_HEADER, false );
curl_setopt( $c, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $c, CURLOPT_TIMEOUT_MS, 100 );
curl_setopt( $c, CURLOPT_CONNECTIONTIMEOUT_MS, 100 );
$result = curl_exec($c);
curl_close($c);
答案 0 :(得分:7)
要关闭此问题:
我正在使用的curl版本(7.15.5)不支持CURLOPT_TIMEOUT_MS。据格雷格说,我至少需要7.16.2。
答案 1 :(得分:0)
我观察到,在运行curl版本4.3.0的CentOS 5.4系统上存在类似的问题,并且似乎只要将curl构建为使用“标准系统名称解析器”,就会出现这种情况。
解决方法是将“ CURLOPT_NOSIGNAL”选项与“ CURLOPT_TIMEOUT_MS”一起使用;但这可能有其后果。
在下一页查看详细信息: https://ravidhavlesha.wordpress.com/2012/01/08/curl-timeout-problem-and-solution/