mz

curl_multi多线程采集

$ListDate=[ //所有需要采集的链接 
['href'=>'http://www.baidu.com'],
['href'=>'www.245it.com'],
];
$data=mzCurlMulti();

function mzCurlMulti($ListData){ //伪多线程抓取
    $chArr=[];  //储蓄多个curl值
    $i=0;
    foreach($ListData as $k=>$v){
        $chArr[$i]=curl_init($v['href']);
        curl_setopt($chArr[$i], CURLOPT_HEADER, 0);//是否输出头信息,0为不输出,非零则输出
        curl_setopt($chArr[$i], CURLOPT_RETURNTRANSFER, 1); //返回数据不直接输出
        curl_setopt($chArr[$i], CURLOPT_SSL_VERIFYPEER, false); //不验证证书
        curl_setopt($chArr[$i], CURLOPT_SSL_VERIFYHOST, false); //不验证证书
        curl_setopt($chArr[$i], CURLOPT_FOLLOWLOCATION, 1); // 302 redirect
        $i++;
    }
    $mh = curl_multi_init(); //1 创建批处理cURL句柄
    foreach($chArr as $k => $ch){      
        curl_multi_add_handle($mh, $ch); //2 增加句柄
    }
    $active = null; 
    do{
    curl_multi_exec($mh, $active); //3 执行批处理句柄
    }while($active > 0); //4

    // 关闭全部句柄
    foreach($chArr as $k=>$ch){
        $data[$k]= curl_multi_getcontent($ch); //5 获取句柄的返回值
        curl_multi_remove_handle($mh, $ch);
    }
    curl_multi_close($mh);  //关闭资源
    return $data;
}

 

码字很辛苦,转载请注明来自明志博客《curl_multi多线程采集》

评论