再分享一种利用php curl实现多线程的方法,具体方法如下:
/*
* http://www.feishuai.vip/php-function/388.html
* php Curl 多线程类
*/
class MultiHttpRequest{
public $urls=array();
public $curlopt_header=1;
public $method="GET";
function __construct($urls=false){
$this->urls=$urls;
}
function set_urls($urls){
$this->urls=$urls;
return $this;
}
function is_return_header($b){
$this->curlopt_header=$b;
return $this;
}
function set_method($m){
$this->medthod=strtoupper($m);
return $this;
}
function start(){
if(!is_array($this->urls) || count($this->urls)==0){
return false;
}
$curl=$text=array();
$handle=curl_multi_init();
foreach($this->urls as $k=>$v){
$curl[$k]=$this->add_handle($handle,$v);
}
$this->exec_handle($handle);
foreach($this->urls as $k=>$v){
curl_multi_getcontent($curl[$k]);
echo $curl[$k]."\n";
//$text[$k]= curl_multi_getcontent($curl[$k]);
//echo $text[$k],"\n\n";
curl_multi_remove_handle($handle,$curl[$k]);
}
curl_multi_close($handle);
}
private function add_handle($handle,$url){
$curl=curl_init();
curl_setopt($curl,CURLOPT_URL,$url);
curl_setopt($curl,CURLOPT_HEADER,$this->curlopt_header);
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
curl_multi_add_handle($handle,$curl);
return $curl;
}
private function exec_handle($handle){
$flag=null;
do{
curl_multi_exec($handle,$flag);
} while ($flag > 0);
}
}
该类的具体使用方法如下:
$urls=array(
'http://www.feishuai.vip/php-function/665.html',
'http://www.feishuai.vip/php-function/392.html',
'http://www.feishuai.vip/php-function/281.html');
$mp=new MultiHttpRequest($urls);
$mp->start();