curl_multi_select()

1. 定义

该函数阻塞进程,直到curl批处理中有活动连接。 成功时返回描述符集合中描述符的数量,select失败时返回-1,超时返回错误。

2. 语法

curl_multi_select ( resource $mh [, float $timeout = 1.0 ] ) : int

3. 参数说明

参数 可选性 数据类型 描述
$mh 必需 资源类型 通过函数curl_multi_init()打开的curl资源句柄
$timeout 可选 浮点型 等待响应的时间,单位为秒,默认为1.0

4. 示例

<?php

// curl_multi_select()
// 阻塞进程,直到curl批处理中有活动连接,成功时返回描述符集合中描述符的数量

$urls = [
    'http://loripsum.net/api/5/short/headers',
    'http://loripsum.net/api/2/short/a/b/i'
];
$mh = curl_multi_init();
foreach ($urls as $key => $value) {
    $ch[$key] = curl_init();
    curl_setopt($ch[$key], CURLOPT_URL, $value);
    curl_multi_add_handle($mh, $ch[$key]);
}

// 批处理
$running = null;
do {
    $mrc = curl_multi_exec($mh, $running);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);

while ($running && $mrc == CURLM_OK) {
    if (curl_multi_select($mh) != -1) { // $mh批处理中还有可执行的$ch句柄,curl_multi_select($mh) != -1程序退出阻塞状态。
        do {
            $mrc = curl_multi_exec($mh, $active); // 继续执行需要处理的$ch句柄。
        } while ($mrc == CURLM_CALL_MULTI_PERFORM);
    }
}

// 移除句柄
foreach ($ch as $key => $value) {
    curl_multi_remove_handle($mh, $value);
}

// 关闭所有句柄
curl_multi_close($mh);

5. 延展阅读