php中的curl_multi系列函数使用例子
相信许多人对php手册中语焉不详的curl_multi一族的函数头疼不已,它们文档少,给的例子更是简单的让你无从借鉴,我也曾经找了许多网页,都没见一个完整的应用例子。
- curl_multi_add_handle
- curl_multi_close
- curl_multi_exec
- curl_multi_getcontent
- curl_multi_info_read
- curl_multi_init
- curl_multi_remove_handle
- curl_multi_select
一般来说,想到要用这些函数时,目的显然应该是要同时请求多个url,而不是一个一个依次请求,否则不如自己循环去调curl_exec好了。
步骤总结如下:
第一步:调用curl_multi_init
第二步:循环调用curl_multi_add_handle
这一步需要注意的是,curl_multi_add_handle的第二个参数是由curl_init而来的子handle。
第三步:持续调用curl_multi_exec
第四步:根据需要循环调用curl_multi_getcontent获取结果
第五步:调用curl_multi_remove_handle,并为每个字handle调用curl_close
第六步:调用curl_multi_close
这里有一个网上找的简单例子,其作者称为dirty的例子,(稍后我会说明为何dirty):
/* Here'saquickanddirtyexampleforcurl-multifromPHP,testedonPHP5.0.0RC1CLI/FreeBSD5.2.1 */
$connomains=array( "http://www.baidu.com/", "http://www.google.com/", "https://www.nhooo.com/" ); $mh=curl_multi_init();
foreach($connomainsas$i=>$url){ $conn[$i]=curl_init($url); curl_setopt($conn[$i],CURLOPT_RETURNTRANSFER,1); curl_multi_add_handle($mh,$conn[$i]); }
do{$n=curl_multi_exec($mh,$active);}while($active);
foreach($connomainsas$i=>$url){ $res[$i]=curl_multi_getcontent($conn[$i]); curl_close($conn[$i]); }
print_r($res);