cURL特性之批处理

cURL批处理

cURL还有一个高级特性——批处理句柄(handle)。这一特性允许同时或异步打开多了cURL连接。

【示例】:

<span style="font-family:FangSong_GB2312;font-size:18px;"><?PHP
      //创建两个cURL资源
      $ch1 = curl_init();
      $ch2 = curl_init();
      //指定URL和适当的参数
      curl_setopt($ch1,CURLOPT_URL,"http://lxr.php.net/");
      curl_setopt($ch1,CURLOPT_HEADER,0);
      curl_setopt($ch2,CURLOPT_URL,"http://www.php.net/");
      curl_setopt($ch2,CURLOPT_HEADER,0);
      //创建cURL批处理句柄
      $mh = curl_multi_init();
      //加上前面两个资源的句柄
      curl_multi_add_handle($mh,$ch1);
      curl_multi_add_handle($mh,$ch2);
      //预定义一个状态变量
      $active = NULL;
      //执行批处理
      do{
           $mrc = curl_multi_exec($mh,$active);
      }while($mrc == CURLM_CALL_MULTI_PERFORM);
      while($active && $mrc ==CURLM_OK){
           if(curl_multi_select($mh) != -1){
                 do{
                      $mrc =curl_multi_exec($mh,$active);
                 }while($mrc ==CURLM_CALL_MULTI_PERFORM);
           }
      }
      //关闭各个句柄
      curl_multi_remove_handle($mh,$ch1);
      curl_multi_remove_handle($mh,$ch2);
      curl_multi_close($mh);
?></span>

【解析】:

这里要做的就是打开多个cURL句柄并指派给一个批处理句柄,然后只需在一个while循环里等待它执行完毕。

第一个do …while循环重复调用curl_multi_exec()。这个函数是无隔断的。但会尽可能少的执行。它会返回一个状态值,只要这个值等于常量CURM_CALL_MULTI_PERFORM,就代表还有一些刻不容缓的工作要做。(例如把对应的URL的HTTP头信息发送出去),也就是说,需要不断调用该函数,直到返回值发生改变。

接下来的while循环,只有在$active变量为true的时候继续这一变量之前作为第二个参数传给了curl_multi_exec(),代表只要批处理句柄中是否还有活动连接。接着调用curl_multi_select(),在活动连接出现之前,它都是被屏蔽的。这个函数成功之后,又会进入另一个do…while循环,继续下一条URL。

【说明】:

很多人把这种方式称为cURL多线程处理,而curl_multi_exec并不是多线程,它属于异步处理的范畴。

时间: 2024-12-20 04:21:41

cURL特性之批处理的相关文章

php 中使用cURL发送get/post请求,上传图片,批处理

cURL是利用url语法规定传输文件和数据的工具.php中有curl拓展,一般用来实现网络抓取,模拟发送get   post请求,文件上传. 在php中建立curl的基本步骤如下: 1 初始化        2 设置选项,包括url        3  执行并获取结果   4 释放curl句柄. 在工作和学习中,我也是时常用的curl.由于在使用curl设置选项时,各种选项比较难以记忆,需要参考,故在此记录下常用的一些例子,以便后来参考. 实例一 : 抓取网页数据(以拉手网开放api为例,也是g

PHP cURL库函数抓取页面内容

目录 1 为什么要用cURL? 2 启用cURL 3 基本结构 4 检查错误 5 获取信息 6 基于浏览器的重定向 7 用POST方法发送数据 8 文件上传 9 cURL批处理(multi cURL) 9.1 WordPress 链接检查器 10 另一些有用的cURL 选项 10.1 HTTP 认证 10.2 FTP 上传 10.3 代理/FQ请求 10.4 回调函数 11 小结 cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议和选项,如HTTP.FTP.TELNET等,能

软件系统

所谓软件是指为方便使用计算机和提高使用效率而组织的程序以及用于开发.使用和维护的有关文档.软件系统可分为系统软件和应用软件两大类. 1.系统软件 系统软件由一组控制计算机系统并管理其资源的程序组成,其主要功能包括:启动计算机,存储.加载和执行应用程序,对文件进行排序.检索,将程序语言翻译成机器语言等.实际上,系统软件可以看作用户与计算机的接口,它为应用软件和用户提供了控制.访问硬件的手段,这些功能主要由操作系统完成.此外,编译系统和各种工具软件也属此类,它们从另一方面辅助用户使用计算机.下面分别

php核心技术与最佳实践知识点(上)

一.基础 1.serialize:序列化一个类,只是保存了类的属性,所以还需要反序列化unserialize的时候包含该类. 2.对于将array转为object,这个转换因为没有具体的类,所以称为了一个孤类: <?php $arr = [1,2]; var_dump((object) $arr); 输出 object(stdClass)#1 (2) { [0]=> int(1) [1]=> int(2) } 3.其他语言的多态是向上转型,php的多态没有转型,只是调用了不同的派生类.

Caffeine缓存

在本文中,我们来看看 Caffeine - 一个高性能的 Java 缓存库. 缓存和 Map 之间的一个根本区别在于缓存可以回收存储的 item. 回收策略为在指定时间删除哪些对象.此策略直接影响缓存的命中率 - 缓存库的一个重要特征. Caffeine 因使用 Window TinyLfu 回收策略,提供了一个近乎最佳的命中率. 填充策略(Population) Caffeine 为我们提供了三种填充策略:手动.同步和异步 手动加载(Manual) Cache<String, Object>

php curl批处理

php模拟多线程用到curl库,这个库很强大,可以做好多事,比如模拟登陆,文件上传/下载,数据采集等. 下面是我的代码,很简单,有些还功能还不会用. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 <?php $node_urls=array('http://www.baidu.com','http://www.google.com.hk'); $ch=arra

curl --connect-timeout 判断国内外网络windows 批处理

1.下载编译curl curl 下载地址:http://curl.haxx.se/download.html ,下载后解压到一个目录,使用vs开发者工具里的 “Visual Studio 命令提示(2010)” 打开命令行, 切换到源码目录 F:\curl-7.46.0\winbuild\,使用命令 nmake/f Makefile.vc mode=static 编译一下,在 F:\curl-7.46.0\builds\libcurl-vc-x86-release-static-ipv6-ssp

php中实现的一个curl批处理的实例

curl是利用URL语法在命令行方式下工作的开源文件传输工具 本文在php中实现了的一个curl批处理的实例. 代码如下: 1 header("Content-Type:text/html;charset=utf8"); 2 3 /* 先获取两个页面的所有a标签 */ 4 // 初始化两个简单处理句柄 5 $ch1 = curl_init(); 6 $ch2 = curl_init(); 7 curl_setopt_array($ch1,array( 8 CURLOPT_URL =&g

SQL批处理的即时结果的特性

优点: SQL批处理的即时结果的特性,直接可以看出插入.修改.删除了哪些数据,而不用中间语言(C#\Java\Python\Ruby)去比较信息,对用户调试,特别是对于几 千上万用户信息的情况尤其有利. 缺点: 下面标红的地方. 在这里其实,所有工作都已经完成了,如果有兴趣,可以往下看. http://cdkf111.noobay.com/news/itemid-355410.shtmlhttp://cdkf111.noobay.com/news/itemid-355409.shtmlhttp: