知识大全 解析php中curl

Posted

篇首语:成年人的平和,一半是理解,一半是算了。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 解析php中curl相关的知识,希望对你有一定的参考价值。

php的multi_curl功能慎用 因为某些版本的curl和php的搭配有Bug 所以你调试过没问题的代码很可能在别的机器上不正确  

  相信许多人对php手册中语焉不详的curl_multi一族的函数头疼不已 它们文档少 给的例子 更是简单的让你无从借鉴 我也曾经找了许多网页 都没见一个完整的应用例子 •curl_multi_add_handle •curl_multi_close •curl_multi_exec •curl_multi_getcontent •curl_multi_info_read •curl_multi_init •curl_multi_remove_handle •curl_multi_select 一般来说 想到要用这些函数时 目的显然应该是要同时请求多个url 而不是一个一个依次请求 否则不如自己循环去调curl_exec好了

  步骤总结如下 第一步 调用curl_multi_init 第二步 循环调用curl_multi_add_handle 这一步需要注意的是 curl_multi_add_handle的第二个参数是由curl_init而来的子handle 第三步 持续调用curl_multi_exec 第四步 根据需要循环调用curl_multi_getcontent获取结果 第五步 调用curl_multi_remove_handle 并为每个字handle调用curl_close 第六步 调用curl_multi_close 这里有一个网上找的简单例子 其作者称为dirty的例子 (稍后我会说明为何dirty)

复制代码 代码如下: * Here s a quick and dirty example for curl multi from PHP tested on PHP RC CLI / FreeBSD */

  $connomains = array( " " " );

  $mh = curl_multi_init();

  foreach ($connomains as $i => $url)      $conn[$i]=curl_init($url);       curl_setopt($conn[$i] CURLOPT_RETURNTRANSFER );       curl_multi_add_handle ($mh $conn[$i]);

  do $n=curl_multi_exec($mh $active); while ($active);

  foreach ($connomains as $i => $url)       $res[$i]=curl_multi_getcontent($conn[$i]);       curl_close($conn[$i]);

  print_r($res);

   整个使用过程差不多就是这样 但是 这个简单代码有个致命弱点 就是在do循环的那段 在整个url请求期间是个死循环 它会轻易导致CPU占用 % 现在我们来改进它 这里要用到一个几乎没有任何文档的函数curl_multi_select了 虽然C的curl库对select有说明 但是 php里的接口和用法确与C中有不同 把上面do的那段改成下面这样

复制代码 代码如下: do                         $mrc = curl_multi_exec($mh $active);                 while ($mrc == CURLM_CALL_MULTI_PERFORM);                 while ($active and $mrc == CURLM_OK)                         if (curl_multi_select($mh) != )                                 do                                         $mrc = curl_multi_exec($mh $active);                                 while ($mrc == CURLM_CALL_MULTI_PERFORM);                                        

   因 为$active要等全部url数据接受完毕才变成false 所以这里用到了curl_multi_exec的返回值判断是否还有数据 当有数据的时候 就不停调用curl_multi_exec 暂时没有数据就进入select阶段 新数据一来就可以被唤醒继续执行 这里的好处就是CPU的无谓消耗没有 了

  另外 还有一些细节的地方可能有时候要遇到 控制每一个请求的超时时间 在curl_multi_add_handle之前通过curl_setopt去做 curl_setopt($ch CURLOPT_TIMEOUT $timeout);

  判断是否超时了或者其他错误 在curl_multi_getcontent之前用 curl_error($conn[$i]);

cha138/Article/program/PHP/201311/21124

相关参考

知识大全 关于php 接口问题(php接口主要也就是运用curl,curl函数)

本篇文章是对php中的接口问题(php接口主要也就是运用curlcurl函数)进行了详细的分析介绍需要的朋友参考下   接口问题php调用接口最主要的就是使用curl抓取信息复制代码代码如下

知识大全 解析将多维数组转换为支持curl提交的一维数组格式

本篇文章是对将多维数组转换为支持curl提交的一维数组格式实现代码进行了详细的分析介绍需要的朋友参考下 复制代码代码如下:cha138/Article/program/PHP/20

知识大全 php curl基本操作详解

怎么使用cURL的基本方法?首先修改phpini文件的设置找到php_curldll取消下在的注释extension=php_curldll因为php默认是不开启cURL的 复制代码代码如下

知识大全 PHP用CURL伪造IP和来源

PHP用CURL伪造IP和来源  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  php代码  $c

知识大全 使用PHP的cURL库进行网页抓取

使用PHP的cURL库进行网页抓取  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  使用PHP的c

知识大全 php curl选项列表(超详细)

本篇文章是对php中的curl选项列表进行了详细的分析介绍需要的朋友参考下   第一类对于下面的这些option的可选参数value应该被设置一个bool类型的值选项可选value值备注CU

知识大全 php curl模仿ftp文件上传代码

php教程curl模仿ftp<?if(isset($_post[submit])) if(!empty($_files[upload][name]))   

知识大全 Linux系统安装php扩展cURL

Linux系统安装php扩展cURL  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Linux作

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

phpcurl获取网页内容(IPV6下超时)的解决办法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 解析curl提交GET,POST,Cookie的简单方法

解析curl提交GET,POST,Cookie的简单方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下