完整代码:
复制代码 代码示例:
<?php
/*
* curl_multi 经测试,大于四个网址时要比Foreach循环快..
* by wc1217
* edit:www.jb200.com
*/
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;
}
}
?>