PHP Curl批量多线程打开网址的类,类代码如下:
<?php class curl_multi{ //Curl句柄 private $curl_handle=null; //网址 private $url_list=array(); //参数 private $curl_setopt=array( 'CURLOPT_RETURNTRANSFER'=>1,//结果返回给变量 'CURLOPT_HEADER'=>0,//要HTTP头不? 'CURLOPT_NOBODY'=>0,//不要内容? 'CURLOPT_FOLLOWLOCATION'=>0,//自动跟踪 'CURLOPT_TIMEOUT'=>6//超时(s) ); function __construct($seconds=30){ set_time_limit($seconds); } /* * 设置网址 * @list 数组 */ public function setUrlList($list=array()){ $this->url_list=$list; } /* * 设置参数 * @cutPot array */ public function setOpt($cutPot){ $this->curl_setopt=$cutPot+$this->curl_setopt; } /* * 执行 * @return array */ public function exec(){ $mh=curl_multi_init(); foreach($this->url_list as $i=>$url){ $conn[$i]=curl_init($url); foreach($this->curl_setopt as $key=>$val){ curl_setopt($conn[$i],preg_replace('/(CURLOPT_\w{1,})/ie','$0',$key),$val); } curl_multi_add_handle($mh,$conn[$i]); } $active=false; do{ $mrc=curl_multi_exec($mh,$active); }while($mrc==CURLM_CALL_MULTI_PERFORM); while($active and $mrc==CURLM_OK){ if(curl_multi_select($mh) != -1){ do{ $mrc=curl_multi_exec($mh,$active); }while($mrc==CURLM_CALL_MULTI_PERFORM); } } $res=array(); foreach($this->url_list as $i=>$url){ $res[$i]=curl_multi_getcontent($conn[$i]); curl_close($conn[$i]); curl_multi_remove_handle($mh,$conn[$i]);//释放资源 } curl_multi_close($mh); return $res; } }
使用示例如下:
$url_array=array('http://www.baidu.com','http://php.hhsy.cc','http://www.taobao.com'); $curl=new curl_multi; $curl->setUrlList($url_array); $result=$curl->exec(); echo '<pre>'; print_r($result);