php curl获取网页内容(IPV6下超时)的解决办法_php技巧

原因:
在程序中我对curl获取内容都作了较为严格的超时限制,所以就会造成无法获取内容的问题。

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

复制代码 代码如下:

<?php
/**
* IPV6下curl超时问题
*/
$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及以上版本时,以上设置才生效。

时间: 2024-11-10 01:21:12

php curl获取网页内容(IPV6下超时)的解决办法_php技巧的相关文章

php curl获取网页内容(IPV6下超时)的解决办法

如果开启了IPv6,curl默认会优先解析 IPv6,在对应域名没有 IPv6 的情况下,会等待 IPv6 dns解析失败 timeout 之后才按以前的正常流程去找 IPv4   原因:在程序中我对curl获取内容都作了较为严格的超时限制,所以就会造成无法获取内容的问题. 解决方法:设置默认访问为ipv4.php的curl设置方法如下: 复制代码 代码如下: <?php /** * IPV6下curl超时问题 */ $ch = curl_init(); curl_setopt ($ch, CU

浅谈php处理后端&amp;接口访问超时的解决方法_php技巧

[HTTP访问] 一般我们访问HTTP方式很多,主要是:curl, socket, file_get_contents() 等方法. 如果碰到对方服务器一直没有响应的时候,我们就悲剧了,很容易把整个服务器搞死,所以在访问http的时候也需要考虑超时的问题. [ CURL 访问HTTP] CURL 是我们常用的一种比较靠谱的访问HTTP协议接口的lib库,性能高,还有一些并发支持的功能等. CURL: curl_setopt($ch, opt) 可以设置一些超时的设置,主要包括: *(重要) CU

PHP进行批量任务处理不超时的解决方法_php技巧

本文实例分析了PHP进行批量任务处理不超时的解决方法.分享给大家供大家参考,具体如下: PHP批量任务处理 PHP在批量处理任务的时候会超时,其实解决方法很简单了,就是把任务分割,一次处理一部分,任务进度可以放在服务端也可以放在客户端,不是很复杂的话放在客户端,用js来处理就可以了. 客户端js回调处理 客户端处理的时候需要住一个地方,就是使用ajax处理的时候,ajax是异步的,使用for循环来处理的时候只是批量请求,这样任务量大的时候会直接DDOS服务器,所以需要等待回调函数返回,然后进行下

PHP采用get获取url汉字出现乱码的解决方法_php技巧

本文实例讲述了PHP采用get获取url汉字出现乱码的解决方法.分享给大家供大家参考.具体方法如下: 一.问题: 本来打算这样使用 复制代码 代码如下: <a href="list.php?plate=辖区动态" charset="utf-8" target="main">[查看辖区动态]</a> 结果在list.php页面得到的是-–查看[辖区动怿] 一开始猜想可能是汉字的"态"这个编码和某些东西冲突

php中用date函数获取当前时间有误的解决办法_php技巧

初学PHP做网站,想在页面上获得当前时间,学过编程的人都知道用时间函数date(),先用这个函数格式化一个本地时间/日期,先写个测试代码吧,结果输出时间比实际时间少了8小时,这是什么原因呢: 复制代码 代码如下: <?php     echo date('Y-m-d H:i:s'); ?〉 输出当前时间:2008-10-12 02:32:17 怪了,实际时间是:2008-10-12 10:32:17 难道是PHP的date()时间不正确 少8个小时? 再看看PHP手册的"例子 1. dat

php下关于Cannot use a scalar value as an array的解决办法_php技巧

今天在测试php程序的时候,出现了一个错误提示:Cannot use a scalar value as an array,这个错误提示前几天也出过,当时好像稍微调了一下就好了,也没深究,今天却又出现了. 不能再糊弄了,得找出原因和解决办法,于是我就去网上搜啊找啊,找了很久都没找到结果,不是网上搜不到这样的问题,而是很少有人做正面的准确的回答.最后这篇文章的一段文字让我一下子弄明白了怎么回事. -------------- 需要注意的是类型的转换: 如果一个变量名(如a)已经被定义为非数组类型,

PHP 获取远程文件大小的3种解决方法_php技巧

1.使用file_get_contents() 复制代码 代码如下: <?php$file = file_get_contents($url);echo strlen($file);?> 2. 使用get_headers() 复制代码 代码如下: <?php$header_array = get_headers($url, true);$size = $header_array['Content-Length'];echo $size;?> PS:需要打开allow_url_fop

mysql导入sql文件过大或连接超时的解决办法

原文:mysql导入sql文件过大或连接超时的解决办法      前段时间出差在现场开发的时候,导入数据库老是出问题.最后发现了一个神奇sql语句交给实施,只要导入出错就把如下语句执行就可以了.至今屡试不爽. set global max_allowed_packet=100 000 000; set global net_buffer_length=100000; SET GLOBAL interactive_timeout=28800 000; SET GLOBAL wait_timeout

php解决ipv6使curl获取网页内容超时解决办法

问题原因: 如果开启了IPv6,curl默认会优先解析 IPv6,在对应域名没有 IPv6 的情况下,会等待 IPv6 dns解析失败 timeout 之后才按以前的正常流程去找 IPv4.在程序中我对curl获取内容都作了较为严格的超时限制,所以就会造成无法获取内容的问题. 解决的方法是设置默认访问为ipv4,php的curl设置方法具体如下  代码如下 复制代码 $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, $url); curl_set