php利用curl实现多线程类,php curl多线程下载图片实例

分享一个php多线程类(其实是php利用curl实现的一个多线程类),有了这个类,我们也可利用该类执行多线程任务了!

  1. <?php 
  2. class curl_multi{ 
  3.     private $url_list=array(); 
  4.     private $curl_setopt=array
  5.         'CURLOPT_RETURNTRANSFER' => 1,//结果返回给变量 
  6.         'CURLOPT_HEADER' => 0,//是否需要返回HTTP头 
  7.         'CURLOPT_NOBODY' => 0,//是否需要返回的内容 
  8.         'CURLOPT_FOLLOWLOCATION' => 0,//自动跟踪 
  9.         'CURLOPT_TIMEOUT' => 6//超时时间(s) 
  10.     ); 
  11.     function __construct($seconds=30){ 
  12.         set_time_limit($seconds); 
  13.     } 
  14.     /* 
  15.      * 设置网址 
  16.      * @list 数组 
  17.      */ 
  18.     public function setUrlList($list=array()){ 
  19.         $this->url_list=$list
  20.     } 
  21.     /* 
  22.      * 设置参数 
  23.      * @cutPot array 
  24.      */ 
  25.     public function setOpt($cutPot){ 
  26.         $this->curl_setopt=$cutPot+$this->curl_setopt; 
  27.     } 
  28.     /* 
  29.      * 执行 
  30.      * @return array 
  31.      */ 
  32.     public function execute(){ 
  33.         $mh=curl_multi_init(); 
  34.         foreach($this->url_list as $i=>$url){ 
  35.             $conn[$i]=curl_init($url); 
  36.             foreach($this->curl_setopt as $key => $val){ 
  37.                 curl_setopt($conn[$i],preg_replace('/(CURLOPT_\w{1,})/ie','$0',$key),$val); 
  38.             } 
  39.             curl_multi_add_handle($mh,$conn[$i]); 
  40.         } 
  41.         $active=false; 
  42.         do
  43.             $mrc=curl_multi_exec($mh,$active); 
  44.         }while($mrc == CURLM_CALL_MULTI_PERFORM); 
  45.  
  46.         while($active and $mrc == CURLM_OK){ 
  47.             if(curl_multi_select($mh) != -1){ 
  48.                 do
  49.                     $mrc=curl_multi_exec($mh,$active); 
  50.                 }while($mrc == CURLM_CALL_MULTI_PERFORM); 
  51.             } 
  52.         } 
  53.         $res=array(); 
  54.         foreach($this->url_list as $i => $url){ 
  55.             $res[$i]=curl_multi_getcontent($conn[$i]); 
  56.             curl_close($conn[$i]); 
  57.             curl_multi_remove_handle($mh,$conn[$i]);//释放资源   
  58.         } 
  59.         curl_multi_close($mh); 
  60.         return $res
  61.     } 

php使用多线程下载类示例:下载远程图片

  1. $curl_mul=new curl_multi(); 
  2. $curl_mul->setUrlList(array('http://www.baidu.com/img/baidu_sylogo1.gif','http://www.baidu.com/img/baidu_sylogo1.gif','http://www.baidu.com/img/baidu_sylogo1.gif')); 
  3. $a=$curl_mul->execute(); 
  4. $i=1; 
  5. foreach($a as $v){ 
  6.     $filename=$i.'.gif'
  7.     $fp2=@fopen($filename,'a'); 
  8.     fwrite($fp2,$v); 
  9.     fclose($fp2); 
  10.     $i++; 

转载请注明:代码家园 » php利用curl实现多线程类,php curl多线程下载图片实例

评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)