您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

curl多线程采撷不是采集不到就是采不全

2025/12/26 23:42:02发布20次查看
curl多线程采集不是采集不到就是采不全?
如题,代码如下,请问如何解决?
/** 
     * curl 多线程 
     *  
     * @param array $array 并行网址 
     * @param int $timeout 超时时间
     * @return array 
     */
 function curl_http($array,$timeout){
    $res = array();
    $mh = curl_multi_init();//创建多个curl语柄
    $startime = getmicrotime();
    foreach($array as $k=>$url){
        $conn[$k]=curl_init($url);
        curl_setopt($conn[$k], curlopt_timeout, $timeout);//设置超时时间
        curl_setopt($conn[$k], curlopt_useragent, 'mozilla/5.0 (compatible; msie 5.01; windows nt 5.0)');
        curl_setopt($conn[$k], curlopt_maxredirs, 7);//http定向级别
        curl_setopt($conn[$k], curlopt_header, 0);//这里不要header,加块效率
        curl_setopt($conn[$k], curlopt_followlocation, 1); // 302 redirect
        curl_setopt($conn[$k],curlopt_returntransfer,1);
        curl_multi_add_handle ($mh,$conn[$k]);
    }
     //防止死循环耗死cpu 这段是根据网上的写法
        do {
            $mrc = curl_multi_exec($mh,$active);//当无数据,active=true
        } while ($mrc == curlm_call_multi_perform);//当正在接受数据时
        while ($active and $mrc == curlm_ok) {//当无数据时或请求暂停时,active=true
            if (curl_multi_select($mh) != -1) {
                do {
                    $mrc = curl_multi_exec($mh, $active);
                } while ($mrc == curlm_call_multi_perform);
            }
        }
    foreach ($array as $k => $url) {
          curl_error($conn[$k]);
          $res[$k]=curl_multi_getcontent($conn[$k]);//获得返回信息
          $header[$k]=curl_getinfo($conn[$k]);//返回头信息
          curl_close($conn[$k]);//关闭语柄
          curl_multi_remove_handle($mh  , $conn[$k]);   //释放资源  
        }
        curl_multi_close($mh);
        $endtime = getmicrotime();
        $diff_time = $endtime - $startime;

该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product