PHP Curl批量多线程打开网址的类

PHP Curl批量多线程打开网址的类,类代码如下:

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

使用示例如下:

  1. $url_array=array('http://www.baidu.com','http://www.daimajiayuan.com','http://www.taobao.com'); 
  2. $curl=new curl_multi; 
  3. $curl->setUrlList($url_array); 
  4. $result=$curl->exec(); 
  5. echo '<pre>'
  6. print_r($result); 

转载请注明:代码家园 » PHP Curl批量多线程打开网址的类

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