background image

 

php 中 curl_multi 的应用

php 的 multi_curl 功能慎用,因为某些版本的 curl 和 php 的搭配有 Bug。所以你调试过没问
题的代码很可能在别的机器上不正确
相信许多人对 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's a quick 

and

 dirty example 

for

 curl-multi from PHP, tested on PHP 5.0.0RC1 CLI / FreeBSD 

5.2.1
*/

$connomains

 = 

array

(

"",
"",
""
);

$mh

 = curl_multi_init();

foreach

 (

$connomains

 

as

 

$i

 => 

$url

) {

     

$conn

[

$i

]=curl_init(

$url

);

      

curl_setopt(

$conn

[

$i

],CURLOPT_RETURNTRANSFER,1);