PHP curl_multi_close函数

定义和用法

curl_multi_close() 函数用于关闭一组cURL句柄。

语法

curl_multi_close ( CurlMultiHandle $multi_handle ) : void

参数

参数 描述
multi_handle curl_multi_init() 返回的 cURL 多个句柄。

返回值

该函数没有返回值。

示例

以下示例演示了如何使用 curl_multi_close() 函数:

示例 1:基本用法

// 初始化多个cURL句柄
$mh = curl_multi_init();

// 创建两个cURL资源
$ch1 = curl_init();
$ch2 = curl_init();

// 设置URL和相应的选项
curl_setopt($ch1, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch1, CURLOPT_HEADER, 0);
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch2, CURLOPT_URL, "http://www.php.net/");
curl_setopt($ch2, CURLOPT_HEADER, 0);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 1);

// 增加两个句柄
curl_multi_add_handle($mh, $ch1);
curl_multi_add_handle($mh, $ch2);

// 执行批处理句柄
$running = null;
do {
    curl_multi_exec($mh, $running);
} while ($running > 0);

// 关闭所有句柄
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_close($mh);

示例 2:并发请求多个URL

// 创建多个cURL句柄
$urls = [
    'http://api.example.com/users',
    'http://api.example.com/products',
    'http://api.example.com/orders'
];

$mh = curl_multi_init();
$handles = [];

foreach ($urls as $url) {
    $ch = curl_init();
    curl_setopt_array($ch, [
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT => 30,
    ]);
    curl_multi_add_handle($mh, $ch);
    $handles[] = $ch;
}

// 执行并发请求
$running = null;
do {
    curl_multi_exec($mh, $running);
    curl_multi_select($mh);
} while ($running > 0);

// 获取所有响应
$responses = [];
foreach ($handles as $ch) {
    $responses[] = curl_multi_getcontent($ch);
    curl_multi_remove_handle($mh, $ch);
    curl_close($ch);
}

// 关闭多句柄
curl_multi_close($mh);

// 处理响应数据
foreach ($responses as $response) {
    echo $response . "\n";
}

注意事项

注意:在调用 curl_multi_close() 之前,应该先使用 curl_multi_remove_handle() 移除所有单独的cURL句柄,然后使用 curl_close() 关闭它们。

相关函数