打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
php中curl应用(多线程)

php中curl应用(多线程)  

2011-03-21 18:31:46|  分类: php |  标签:key  mh  mrc  ch  array   |字号 订阅

一般来说分一下几个步骤:
1.调用curl_multi_init
2.对地址循环调用
3.循环内部curl_setopt_array();
4.循环内部增加curl_multi_add_handle();
5.持续调用curl_multi_exec();
6.取得结果 curl_multi_getcontent();
7.循环内部curl_multi_remove_handle()
8.循环curl_close();
9.curl_multi_close() 返回结果

如果不明白,请看下面一个例子

//多线程蜘蛛爬虫
function  curl_multi_fetch($urlarr=array()){
    $ch=array();
    $mh=curl_multi_init();
    foreach ($urlarr as $key=>$url){
        $timeout=30;
        $ch[$key] = curl_init();
        curl_setopt_array($ch[$key],
        array(CURLOPT_URL =>$url ,CURLOPT_HEADER =>false,CURLOPT_RETURNTRANSFER => true,CURLOPT_TIMEOUT =>$timeout)
        );
        curl_multi_add_handle($mh,$ch[$key]);
    }
   
    /* wait for performing request */
    do {
        $mrc = curl_multi_exec($mh, $running);
    } while (CURLM_CALL_MULTI_PERFORM == $mrc);
   
    while ($running && $mrc == CURLM_OK){
        if (curl_multi_select($mh,30) > -1){
            do {
                $mrc = curl_multi_exec($mh,$running);
            }while (CURLM_CALL_MULTI_PERFORM == $mrc);
        }
    }
   
    //get content
    $result=$res=array();
    foreach ($urlarr as $key=>$url){
        if ($err = curl_error($ch[$nch]) == ''){
            $res[$key]=curl_multi_getcontent($ch[$key]);
            $result[$key]=$res[$key];
        }else{
            error_log("curl error.");
        }
        curl_multi_remove_handle($mh,$ch[$key]);
        curl_close($ch[$key]);
    }
    curl_multi_close($mh);
    return $result;
}

function microtime_float(){
    list($msec,$sec)=explode(" ",microtime());
    return (floatval($msec) + floatval($sec));
}
$url_arr=array(
     "taobao"=>"http://www.taobao.com",
     "sohu"=>"http://www.sohu.com",
     "sina"=>"http://www.sina.com.cn",
     );
     phpinfo();
     exit;
$timestart=microtime_float();
$data=curl_multi_fetch($url_arr);
$timeend=microtime_float();
$totaltime=$timeend-$timestart;
echo "耗时:{$totaltime}";
var_dump($data);
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
cURL multi批处理实现及避免cURL multi造成CPU负载过高问题
使用PHP CURL的POST数据
前端开发中的性能那点事(二)巧用curl 并发减少后端访问时间 ? 搜索技术博客-淘宝
php curl的深入解析(重要!!!)
PHP使用CURL
php中curl_multi的应用
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服