当前位置:   article > 正文

PHP CURL中CURLOPT_CONNECTTIMEOUT_MS超时问题_php7.2 curl设置超时时间1秒,直接不访问了

php7.2 curl设置超时时间1秒,直接不访问了

PHP CURL中CURLOPT_CONNECTTIMEOUT_MS超时问题

写了一个简单的curl请求

$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_TIMEOUT_MS, 200); //限制响应时间200毫秒
$data = curl_exec($ch);
curl_close($ch);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

再A服务器运行没有然后问题,到了B服务器发现$data返回false
这就令我百思不得其解了?
来我们开始排坑

$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_TIMEOUT_MS, 200); //限制响应时间200毫秒
$data = curl_exec($ch);
if($data === false){ //抓取错误信息
     print_r('---------------------start------------------------'.PHP_EOL);
     var_dump(curl_errno($ch));
     var_dump(curl_error($ch));
     print_r('---------------------end------------------------');
    exit();
}
curl_close($ch);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

然后我们发现它告诉我们errno:28 超时了!!!
超时了那好解决啊,想当然的我把超时时间从200ms提升倒了600ms,要知道我们这个接口测试的时候是直接绑定host,响应也是直接返回一个json数据.600ms绝对足够了.

curl_setopt($ch, CURLOPT_TIMEOUT_MS, 600); //限制响应时间600毫秒
  • 1

还是超时!
这就有点不对劲了!
继续修改时间

curl_setopt($ch, CURLOPT_TIMEOUT, 1); //限制响应时间1秒
  • 1

成功了!那么问题就出在CURLOPT_TIMEOUT_MS上面了!

原来 CURLOPT_CONNECTTIMEOUT_MS 的等待的时间,以毫秒为单位。
真确的开启方式是

    curl_setopt($ch, CURLOPT_NOSIGNAL, true);//libcurl支持毫秒
    curl_setopt($ch, CURLOPT_TIMEOUT_MS, 200);
  • 1
  • 2
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/624338
推荐阅读
  

闽ICP备14008679号