«

PHP Curl批量多线程打开网址的类

时间:2024-1-24 09:20     作者:韩俊     分类: PHP


PHP Curl批量多线程打开网址的类,类代码如下:

<?php
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;
    }
}

使用示例如下:

$url_array=array('http://www.baidu.com','http://www.maopiaopiao.com','http://www.taobao.com');
$curl=new curl_multi;
$curl->setUrlList($url_array);
$result=$curl->exec();
echo '<pre>';
print_r($result);

标签: php php教程

热门推荐