Chinaunix首页 | 论坛 | 博客
  • 博客访问: 314199
  • 博文数量: 111
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 707
  • 用 户 组: 普通用户
  • 注册时间: 2013-02-26 11:00
个人简介

小伙向前冲呀,小伙向前冲呀。

文章分类

全部博文(111)

文章存档

2014年(43)

2013年(68)

我的朋友

分类: PHP

2013-07-16 06:43:05

原因:

如果开启了IPv6,curl默认会优先解析 IPv6,在对应域名没有 IPv6 的情况下,会等待 IPv6 dns解析失败 timeout 之后才按以前的正常流程去找 IPv4。在程序中我对curl获取内容都作了较为严格的超时限制,所以就会造成无法获取内容的问题。

解决方法:设置默认访问为ipv4。
php的curl设置方法如下:

复制代码
php /**
* IPV6下curl超时问题
* edit by  */ $ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true); //设置curl默认访问为IPv4 if(defined('CURLOPT_IPRESOLVE') && defined('CURL_IPRESOLVE_V4')){
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
} //设置curl请求连接时的最长秒数,如果设置为0,则无限 curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); //设置curl总执行动作的最长秒数,如果设置为0,则无限 curl_setopt ($ch, CURLOPT_TIMEOUT,$timeout*3); $file_contents = curl_exec($ch);
curl_close($ch);
复制代码

注:curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4) 只有在php版本5.3及以上版本,curl版本7.10.8及以上版本时,以上设置才生效。
原文链接:http://www.cnblogs.com/cfinder010/p/3192380.html

阅读(1146) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~