PHP CURL 多线程 GET/POST 类

来源:互联网 发布:st 8位单片机 编辑:程序博客网 时间:2024/04/29 18:59

来源:http://www.oschina.net/code/snippet_1475115_44902

<?php
/****************************************************************
PHP CURL 多线程 GET/POST
Email:szj1006@vip.qq.com/QQ:690204663
curl(array('url?get=data','url'),array('','post_data'));
*****************************************************************/
functioncurl($urls,$post) {
    $queue= curl_multi_init();
    $map= array();
    foreach($urlsas $key => $url) {
        $ch= curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_TIMEOUT, 30);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post[$key]);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_NOSIGNAL, true);
        curl_multi_add_handle($queue,$ch);
        $map[(string)$ch] = $url;
    }
    $responses= array();
    do{
        while(($code= curl_multi_exec($queue,$active)) == CURLM_CALL_MULTI_PERFORM) ;
        if($code!= CURLM_OK) { break; }
        while($done= curl_multi_info_read($queue)) {
            $error= curl_error($done['handle']);
            $results= curl_multi_getcontent($done['handle']);
            $responses[$map[(string)$done['handle']]] = compact('error','results');
            curl_multi_remove_handle($queue,$done['handle']);
            curl_close($done['handle']);
        }
        if($active> 0) {
            curl_multi_select($queue, 0.5);
        }
    }while($active);
    curl_multi_close($queue);
    return$responses;
}

0 0