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并不是多线程,它属于异步处理的范畴。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值