卷曲超时小于1000毫秒总是失败?

时间:2011-11-02 21:32:46

标签: php curl connection-timeout

此代码始终失败(即$result为布尔false):

     $ch = curl_init();
     curl_setopt($ch, CURLOPT_URL, $path);
     curl_setopt($ch, CURLOPT_HEADER, TRUE);
     curl_setopt($ch, CURLOPT_NOBODY, TRUE);
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
     $curl_version = curl_version();

     curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 999);

     $result = curl_exec($ch);
     curl_close($ch);

此代码始终成功(即$result是包含标题的字符串):

     $ch = curl_init();
     curl_setopt($ch, CURLOPT_URL, $path);
     curl_setopt($ch, CURLOPT_HEADER, TRUE);
     curl_setopt($ch, CURLOPT_NOBODY, TRUE);
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
     $curl_version = curl_version();

     curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 1000);

     $result = curl_exec($ch);
     curl_close($ch);

唯一的区别是我已将超时从999ms更改为1000ms。

这必须是卷曲中的错误或者我错过的连接超时文档中的某种最小值。这是什么?我的钱是后者。

2 个答案:

答案 0 :(得分:12)

来自:http://www.php.net/manual/en/function.curl-setopt.php

  

尝试连接时等待的毫秒数。使用0无限期等待。 如果libcurl构建为使用标准系统名称解析程序,则连接的该部分仍将使用全秒分辨率超时,允许的最小超时时间为一秒 。 / p>

答案 1 :(得分:4)

处理此问题的另一种方法是将CURLOPT_NOSIGNAL选项设置为除CURLOPT_CONNECTTIMEOUT_MS之外的1。有关详细信息,请参阅http://curl.haxx.se/libcurl/c/CURLOPT_NOSIGNAL.html