-
- <?php
- /*
- * curl_multi 经测试,大于四个网址时要比Foreach循环快..
- * by wc1217
- * edit:bbs.it-home.org
- */
- 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){
- ifcurl_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;
- }
- }
- ?>
复制代码 |