cURL批处理(multi cURL)

来源:互联网 发布:安史之乱 知乎 编辑:程序博客网 时间:2024/06/06 13:33

cURL还有一个高级特性——批处理句柄(handle)。这一特性允许你同时或异步地打开多个URL连接。


<?php
$urls = array (
        'www.baidu.com',
        'www.hao123.com',
        'www.baidu.com'
);
// 创建cURL批处理句柄
$mch = curl_multi_init ();
if (!empty($urls)) {
    foreach($urls as $k => $url){
        // 创建cURL资源
        $ch = curl_init();
        //指定URL和适当的参数
        curl_setopt($ch, CURLOPT_URL, $url );
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
        curl_multi_add_handle($mch, $ch );
        // 数组存储url_init
        $chs[$k] = $ch;
    }
}
// 预定义一个状态变量
$active = null;
// 执行批处理句柄
do {
    $mrc = curl_multi_exec($mch, $active );
} while($mrc == CURLM_CALL_MULTI_PERFORM );
while($active && $mrc == CURLM_OK ) {
    if(curl_multi_select($mch ) != - 1) {
        do{
            $mrc = curl_multi_exec($mch, $active );
        }while($mrc == CURLM_CALL_MULTI_PERFORM );
    }
}

foreach($chs as $k => $c ){
    if(curl_error ( $c ) == ''){
        $temp = curl_multi_getcontent($c );
        $arr[$k] = $temp;
        // 关闭各个句柄
        curl_multi_remove_handle($mch, $c );
        curl_close($c);
    } else{
        echo 'failed!';
    }
}
// 关闭各个句柄
curl_multi_close($mch );
print_r($arr);

?>

原创粉丝点击