在之前的文章中,我们分享过一个好用的php 多线程下载类,本节再为大家介绍一个php的多线程类,不过这个是通过curl来实现的。
有兴趣的朋友,可以把两篇文章作个对比,看看其中的不同与各自的长处在哪里?
代码如下:
<?php
/*
* @ php Curl 多线程类
* edit by www.jb200.com
*/
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],"nn";
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);
}
}
?>
调用示例
<?php $urls=array( 'http://www.jb200.com/article/665.html', 'http://www.jb200.com/article/392.html', 'http://www.jb200.com/article/281.html'); $mp=new MultiHttpRequest($urls); $mp->start(); ?>
有关php中curl的相关内容,请参考如下文章:
php curl上传文件
php开启curl扩展
php curl post的简单示例
php curl应用实例
php curl用法实例代码
php curl 学习总结