php curl 多线程实现

再分享一种利用php curl实现多线程的方法,具体方法如下:

  1. /* 
  2.  * php Curl 多线程类 
  3.  */  
  4. class MultiHttpRequest{ 
  5.     public $urls=array(); 
  6.     public $curlopt_header=1; 
  7.     public $method="GET"
  8.     function __construct($urls=false){ 
  9.         $this->urls=$urls
  10.     } 
  11.     function set_urls($urls){ 
  12.         $this->urls=$urls
  13.         return $this
  14.     } 
  15.     function is_return_header($b){ 
  16.         $this->curlopt_header=$b
  17.         return $this
  18.     } 
  19.     function set_method($m){ 
  20.         $this->medthod=strtoupper($m); 
  21.         return $this
  22.     } 
  23.     function start(){ 
  24.         if(!is_array($this->urls) || count($this->urls)==0){ 
  25.            return false; 
  26.         } 
  27.         $curl=$text=array(); 
  28.         $handle=curl_multi_init(); 
  29.         foreach($this->urls as $k=>$v){ 
  30.            $curl[$k]=$this->add_handle($handle,$v); 
  31.         } 
  32.   
  33.         $this->exec_handle($handle); 
  34.         foreach($this->urls as $k=>$v){ 
  35.             curl_multi_getcontent($curl[$k]); 
  36.             echo $curl[$k]."\n"
  37.             //$text[$k]= curl_multi_getcontent($curl[$k]); 
  38.             //echo $text[$k],"\n\n"; 
  39.             curl_multi_remove_handle($handle,$curl[$k]); 
  40.         } 
  41.         curl_multi_close($handle); 
  42.     } 
  43.     private function add_handle($handle,$url){ 
  44.         $curl=curl_init(); 
  45.         curl_setopt($curl,CURLOPT_URL,$url); 
  46.         curl_setopt($curl,CURLOPT_HEADER,$this->curlopt_header); 
  47.         curl_setopt($curl,CURLOPT_RETURNTRANSFER,1); 
  48.         curl_multi_add_handle($handle,$curl); 
  49.         return $curl
  50.     } 
  51.     private function exec_handle($handle){ 
  52.         $flag=null; 
  53.         do
  54.            curl_multi_exec($handle,$flag); 
  55.         } while ($flag > 0); 
  56.     } 

该类的具体使用方法如下:

  1. $urls=array
  2. 'http://www.daimajiayuan.com/sitejs-16680-1.html'
  3. 'http://www.daimajiayuan.com/sitejs-16614-1.html'
  4. 'http://www.daimajiayuan.com/sitejs-16570-1.html'); 
  5. $mp=new MultiHttpRequest($urls); 
  6. $mp->start(); 

转载请注明:代码家园 » php curl 多线程实现

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