9

此代码总是失败(即,$result是 Boolean 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);

唯一的区别是我将超时时间从 999 毫秒更改为 1000 毫秒。

这必须是 curl 中的错误,或者是我错过的连接超时文档中的某种最小值。它是哪一个?我的钱是后者。

4

2 回答 2

13

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

尝试连接时等待的毫秒数。使用 0 无限期等待。如果构建 libcurl 以使用标准系统名称解析器,则连接的该部分仍将使用整秒解析超时,允许的最小超时为一秒

于 2011-11-02T21:43:11.540 回答
4

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

于 2015-01-20T10:24:19.380 回答