注册 | 登陆
您的位置:阿里西西 > 编程技术 > PHP教程 > 详细内容

如何通过PHP多线程批量采集下载远程网站图片代码实例

  稿源:本站整理   2015-05-12   点击:   撤稿纠错
使用curl的多线程,另外curl可以设置请求时间,遇到很慢的url资源,可以果断的放弃,这样没有阻塞,另外有多线程请求,效率应该比较高

以下讨论的是和多线程 采集 远程 相关的如何通过PHP多线程批量采集下载远程网站图片代码实例教程文章,内容是本站精心挑选整理的教程,希望对广大的网友给到帮助,下面是详细内容:

使用curl的多线程,另外curl可以设置请求时间,遇到很慢的url资源,可以果断的放弃,这样没有阻塞,另外有多线程请求,效率应该比较高

使用curl的多线程,另外curl可以设置请求时间,遇到很慢的url资源,可以果断的放弃,这样没有阻塞,另外有多线程请求,效率应该比较高

下面是代码实现:


 
  1. /**  
  2.      * curl 多线程  
  3.      * @author http://www.lai18.com 
  4.      * @param array $array 并行网址  
  5.      * @param int $timeout 超时时间 
  6.      * @return mix  
  7.      */ 
  8.  public function Curl_http($array,$timeout='15'){ 
  9.       $res = array(); 
  10.  
  11.       $mh = curl_multi_init();//创建多个curl语柄 
  12.  
  13.       foreach($array as $k=>$url){ 
  14.           $conn[$k]=curl_init($url);//初始化 
  15.  
  16.           curl_setopt($conn[$k], CURLOPT_TIMEOUT, $timeout);//设置超时时间 
  17.           curl_setopt($conn[$k], CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)'); 
  18.           curl_setopt($conn[$k], CURLOPT_MAXREDIRS, 7);//HTTp定向级别 ,7最高 
  19.           curl_setopt($conn[$k], CURLOPT_HEADER, false);//这里不要header,加块效率 
  20.           curl_setopt($conn[$k], CURLOPT_FOLLOWLOCATION, 1); // 302 redirect 
  21.           curl_setopt($conn[$k], CURLOPT_RETURNTRANSFER,1);//要求结果为字符串且输出到屏幕上           
  22.     curl_setopt($conn[$k], CURLOPT_HTTPGET, true); 
  23.  
  24.           curl_multi_add_handle ($mh,$conn[$k]); 
  25.       } 
  26.        //防止死循环耗死cpu 这段是根据网上的写法 
  27.           do { 
  28.               $mrc = curl_multi_exec($mh,$active);//当无数据,active=true 
  29.           } while ($mrc == CURLM_CALL_MULTI_PERFORM);//当正在接受数据时 
  30.           while ($active and $mrc == CURLM_OK) {//当无数据时或请求暂停时,active=true 
  31.               if (curl_multi_select($mh) != -1) { 
  32.                   do { 
  33.                       $mrc = curl_multi_exec($mh, $active); 
  34.                   } while ($mrc == CURLM_CALL_MULTI_PERFORM); 
  35.               } 
  36.           } 
  37.  
  38.       foreach ($array as $k => $url) { 
  39.             if(!curl_errno($conn[$k])){ 
  40.              $data[$k]=curl_multi_getcontent($conn[$k]);//数据转换为array 
  41.              $header[$k]=curl_getinfo($conn[$k]);//返回http头信息 
  42.              curl_close($conn[$k]);//关闭语柄 
  43.              curl_multi_remove_handle($mh  , $conn[$k]);   //释放资源  
  44.             }else{ 
  45.              unset($k,$url); 
  46.             } 
  47.           } 
  48.  
  49.           curl_multi_close($mh); 
  50.  
  51.           return $data; 
  52.  
  53.    } 
  54.  
  55. //参数接收 
  56. $callback = $_GET['callback']; 
  57. $hrefs = $_GET['hrefs']; 
  58. $urlarray = explode(',',trim($hrefs,',')); 
  59. $date = date('Ymd',time()); 
  60. //实例化 
  61. $img = new HttpImg(); 
  62. $stime = $img->getMicrotime();//开始时间 
  63.  
  64. $data = $img->Curl_http($urlarray,'20');//列表数据 
  65. mkdir('./img/'.$date,0777); 
  66. foreach ((array)$data as $k=>$v){ 
  67.  preg_match_all("/(hrefsrc)=(["']?)([^ "'>]+.(jpgpngPNGJPGgif))\2/i", $v, $matches[$k]); 
  68.  
  69.  if(count($matches[$k][3])>0){ 
  70.   $dataimg = $img->Curl_http($matches[$k][3],'20');//全部图片数据二进制 
  71.   $j = 0; 
  72.   foreach ((array)$dataimg as $kk=>$vv){ 
  73.    if($vv !=''){ 
  74.     $rand = rand(1000,9999); 
  75.     $basename = time()."_".$rand.".".jpg;//保存为jpg格式的文件 
  76.     $fname = './img/'.$date."/"."$basename"; 
  77.     file_put_contents($fname, $vv);    
  78.     $j++; 
  79.     echo "创建第".$j."张图片"."$fname"."
    "; 
  80.    }else{ 
  81.     unset($kk,$vv); 
  82.    } 
  83.   } 
  84.  }else{ 
  85.   unset($matches); 
  86.  } 
  87. $etime = $img->getMicrotime();//结束时间 
  88. echo "用时".($etime-$stime)."秒"; 
  89. exit; 
本页网址:http://www.alixixi.com/biancheng/a/2015051294772.shtml,如果对您有帮助欢迎收藏或转载网址,欢迎再次访问http://www.alixixi.com
更多关于 多线程 采集 远程 的文章
相关阅读

相关排行总榜

ASP教程

PHP教程

.NET教程

ASP采集功能WinHttp.WinHttpRequest.5.1的
AspJpeg图片处理组件属性的详细中文使用说
通过ASP生成html纯静态页面的简单示例
ASP开发中一个把GB2312转UTF-8编码的函数
推荐几个ASP开发中常用的fso操作文件图片
ASP读取操作生成excel文件的实例代码教程
使用ASP进行网站开发防范ASP木马的10条建
通过ASP调用MSSQL数据库视图和存储过程的
通过aspupload上传组件实现的ASP实现远程
ASP调用MSSQL存储过程进行分页的两种方式
PHP解决HTTP和HTTPS跨域共享session的方法
php程序判断来访客户端是手机端还是电脑P
用PHP来获取当前页面所有url参数信息的教
配置好环境后,进行php代码调试的方法总结
教您使用php代码实现上传图片或文件到服务
PHP开发中推荐十款最出色的安全开发工具库
PHP基础学习之数组介绍
浅谈JSP与ASP.PHP的各种平台应用比较
php制作一个万年历查询的实例代码教程
制作简单安全的php验证码类代码实例
ASP.NET环境配置中几种身份验证方式及权限
记录一次对ASP.NET网站漏洞的入侵和防范教
Asp.net在mvc环境下实现上传头像加剪裁功
对 ASP.NET 异步编程的一点理解与分析
ASP.NET读取与操作Session的代码案例教程
ASP.NET将大文件数据分成较小的部分进行分
讲解.Net组件程序设计之异步调用
AS脚本与Asp.net通过UrlRequest进行前端交
一组常用的.NET命名空间中文解释
asp.net解决url地址栏传递中文参数出现乱