www.adminn.cn
站长正能量分享网!

PHP使用CURL_MULTI实现多线程采集的例子

AD:阿里云服务器企业会员更优惠 腾讯云香港,韩国免备案服务器1.8折优惠

这篇文章主要介绍了PHP使用CURL_MULTI实现多线程采集的例子,CURL_MULTI可以对HTTP进行并发访问,需要的朋友可以参考下

这两天有一客户定制了一个免登录发布模块,因为在模块中需要涉及到很多图片下载的问题,考虑到性能问题,所以特别写了一个CURL_MULTI远程采集网页的函数,以方便以后使用,估计以后都不会使用原来的单线程curl函数去foreach了,其性能对比很明显的。同样获取我的博客的十个不同网页,curl_multi:4.5246081352234,file_get_contents:33.001797914505,将近8倍的效率,可想而知,如果在附件更多的情况下,性能差异就越明显了,希望对您有所帮助!

代码如下:

  1. <?php 
  2. $text = remote(array('https://www.adminn.cn/','http://www.baidu.com/')); 
  3. print_r($text); 
  4.  
  5. function remote($urls) { 
  6.     if (!is_array($urlsor count($urls) == 0) { 
  7.         return false; 
  8.     } 
  9.  
  10.     $curl = $text = array(); 
  11.     $handle = curl_multi_init(); 
  12.     foreach($urls as $k => $v) { 
  13.         $nurl[$k]= preg_replace('~([^:\/\.]+)~ei'"rawurlencode('\\1')"$v); 
  14.         $curl[$k] = curl_init($nurl[$k]); 
  15.         curl_setopt($curl[$k], CURLOPT_RETURNTRANSFER, 1); 
  16.         curl_setopt($curl[$k], CURLOPT_HEADER, 0); 
  17.         curl_multi_add_handle ($handle$curl[$k]); 
  18.     } 
  19.  
  20.     $active = null; 
  21.     do { 
  22.         $mrc = curl_multi_exec($handle$active); 
  23.     } while ($mrc == CURLM_CALL_MULTI_PERFORM); 
  24.  
  25.     while ($active && $mrc == CURLM_OK) { 
  26.         if (curl_multi_select($handle) != -1) { 
  27.             do { 
  28.                 $mrc = curl_multi_exec($handle$active); 
  29.             } while ($mrc == CURLM_CALL_MULTI_PERFORM); 
  30.         } 
  31.     } 
  32.  
  33.     foreach ($curl as $k => $v) { 
  34.         if (curl_error($curl[$k]) == "") { 
  35.         $text[$k] = (string) curl_multi_getcontent($curl[$k]); 
  36.         } 
  37.         curl_multi_remove_handle($handle$curl[$k]); 
  38.         curl_close($curl[$k]); 
  39.     } 
  40.     curl_multi_close($handle); 
  41.     return $text

模板优惠价: (点击购买)
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《PHP使用CURL_MULTI实现多线程采集的例子》
文章链接:https://www.adminn.cn/news/19701.html
本站资源模板仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。2021.5月起,网站调整,暂不再分享免费模板。谢谢理解

扫码支付后请联系右侧QQ发送下载地址!!

源码请勿用于任何涉灰站点!净化网络,站长更有责!

支付宝扫一扫打赏