Curl批量打开网址的PHP类,curl_multi_init
来源:互联网 发布:java写接口自动化测试 编辑:程序博客网 时间:2024/05/21 09:35
<?php/* * curl_multi 经本人测试,大于四个网址的时候要比Foreach循环快.. * by wc1217 */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; }}?>