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);