此代码始终失败(即$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。
这必须是卷曲中的错误或者我错过的连接超时文档中的某种最小值。这是什么?我的钱是后者。
答案 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。