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