CakeFest 2024: The Official CakePHP Conference

curl_multi_info_read

(PHP 5, PHP 7, PHP 8)

curl_multi_info_read获取当前传输的有关信息

说明

curl_multi_info_read(CurlMultiHandle $multi_handle, int &$queued_messages = null): array|false

查询多句柄是否有来自个别传输的消息或信息,消息可能包含诸如来自传输的错误代码或者仅是传输已完成之类的信息。

重复调用此函数,每次都会返回新结果,返回 false 作为此时没有更多信息可以获取的信号。通过 queued_messages 返回的整数包含当前函数调用后剩余的消息数量。

警告

返回的资源指向的数据将无法在调用 curl_multi_remove_handle() 后继续存在。

参数

multi_handle

curl_multi_init() 返回的 cURL 多个句柄。

queued_messages

仍在队列中的消息数量。

返回值

成功时返回信息的关联数组,失败时返回 false

返回数组的内容
Key: Value:
msg CURLMSG_DONE 常量。其他返回值当前不可用。
result CURLE_* 常量之一。如果一切都好,将会返回 CURLE_OK
handle cURL 资源类型表明它有关的句柄。

更新日志

版本 说明
8.0.0 multi_handle expects a CurlMultiHandle instance now; previously, a resource was expected.

示例

示例 #1 curl_multi_info_read() 示例

<?php

$urls
= array(
"http://www.cnn.com/",
"http://www.bbc.co.uk/",
"http://www.yahoo.com/"
);

$mh = curl_multi_init();

foreach (
$urls as $i => $url) {
$conn[$i] = curl_init($url);
curl_setopt($conn[$i], CURLOPT_RETURNTRANSFER, 1);
curl_multi_add_handle($mh, $conn[$i]);
}

do {
$status = curl_multi_exec($mh, $active);
if (
$active) {
curl_multi_select($mh);
}
while (
false !== ($info = curl_multi_info_read($mh))) {
var_dump($info);
}
} while (
$active && $status == CURLM_OK);

foreach (
$urls as $i => $url) {
$res[$i] = curl_multi_getcontent($conn[$i]);
curl_close($conn[$i]);
}

var_dump(curl_multi_info_read($mh));

?>

以上示例的输出类似于:

array(3) {
  ["msg"]=>
  int(1)
  ["result"]=>
  int(0)
  ["handle"]=>
  resource(5) of type (curl)
}
array(3) {
  ["msg"]=>
  int(1)
  ["result"]=>
  int(0)
  ["handle"]=>
  resource(7) of type (curl)
}
array(3) {
  ["msg"]=>
  int(1)
  ["result"]=>
  int(0)
  ["handle"]=>
  resource(6) of type (curl)
}
bool(false)

参见

add a note

User Contributed Notes 1 note

up
-2
Nick Smith
13 years ago
Just to let others who might be struggling to get it to work, curl_multi_info_read() doesn't work in PHP versions before 5.2.0, and instead returns NULL immediately.
To Top