php curl 多线程类,PHP Curl 多线程实现

使用方法:

$urls = array("http://baidu.com", "http://bestlovesky.com", "http://google.com");

$mp = new MultiHttpRequest($urls);

$mp ->start(); 下载: class_curl_multi.php

/**

* Curl 多线程类

* 使用方法:

* ========================

* $urls = array("http://baidu.com", "http://bestlovesky.com", "http://google.com");

* $mp = new MultiHttpRequest($urls);

* $mp->start();

* ========================

*/

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) or 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);

}

}  php利用curl实现多线程的类,php curl多线程下载图片

分享一个php多线程类(其实是php利用curl实现的一个多线程类),有了这个类,我们也可利用该类执行多线程任务了

class curl_multi{

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 execute(){

$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;

}

} php使用多线程下载类示例:下载远程图片

$curl_mul=new curl_multi();

$curl_mul->setUrlList(array('http://www.baidu.com/img/baidu_sylogo1.gif','http://www.baidu.com/img/baidu_sylogo1.gif','http://www.baidu.com/img/baidu_sylogo1.gif'));

$a=$curl_mul->execute();

$i=1;

foreach($a as $v){

$filename=$i.'.gif';

$fp2=@fopen($filename,'a');

fwrite($fp2,$v);

fclose($fp2);

$i++;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值