当前位置: 首页> 最新文章列表> 如何使用 curl_multi_close 正确关闭多个 CURL 连接

如何使用 curl_multi_close 正确关闭多个 CURL 连接

gitbox 2025-05-12

在 PHP 中,curl_multi_* 函数系列用于同时执行多个 cURL 请求。curl_multi_close() 是这个系列中的一个重要函数,用来关闭由 curl_multi_init() 初始化的多个 cURL 句柄。

什么是 curl_multi_* 函数系列?

curl_multi_* 函数系列是 PHP 中用于并行处理多个 cURL 请求的工具。它们允许你同时发送多个 HTTP 请求,而不需要等待每个请求完成后再发送下一个。通过这种方式,可以显著提高多个请求的处理效率,尤其是在需要请求多个 API 或网站时。

常见的 curl_multi_* 函数有:

为什么要使用 curl_multi_close()

在使用 curl_multi_* 函数执行多个 cURL 请求时,每个请求都是独立的,且每个请求都有自己的资源消耗。为了确保在请求完成后能够及时释放这些资源,必须调用 curl_multi_close() 来关闭连接。

如果你不使用 curl_multi_close(),这些 cURL 句柄可能会继续占用内存和其他资源,导致性能问题,甚至内存泄漏。因此,在请求完成后,正确关闭这些连接是非常重要的。

curl_multi_close() 使用示例

下面是一个示例,展示了如何使用 curl_multi_close() 来关闭多个 cURL 连接。

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

// 定义要请求的 URL 列表
$urls = [
    "https://gitbox.net/api/endpoint1",
    "https://gitbox.net/api/endpoint2",
    "https://gitbox.net/api/endpoint3"
];

// 存储 cURL 句柄
$ch_handles = [];

// 创建每个 cURL 句柄并添加到 multi 句柄中
foreach ($urls as $url) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_multi_add_handle($mh, $ch);
    $ch_handles[] = $ch;
}

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

// 获取每个请求的内容并关闭 cURL 句柄
foreach ($ch_handles as $ch) {
    $content = curl_multi_getcontent($ch);
    echo $content . "\n"; // 输出返回的内容
    curl_multi_remove_handle($mh, $ch);
    curl_close($ch); // 关闭每个 cURL 句柄
}

// 关闭 multi 句柄
curl_multi_close($mh);
?>

代码解析

  1. 初始化多个 cURL 句柄

    • 使用 curl_multi_init() 创建一个新的 multi 句柄,该句柄用于管理多个 cURL 请求。

  2. 添加多个 cURL 句柄

    • 对每个 URL 创建一个 cURL 句柄,设置相关选项,然后通过 curl_multi_add_handle() 将这些句柄添加到 multi 句柄中。

  3. 执行请求

  4. 获取内容并关闭句柄

  5. 关闭 multi 句柄

    • 最后,调用 curl_multi_close() 来关闭 multi 句柄并释放所有资源。

小结

正确使用 curl_multi_close() 是确保多个 cURL 请求资源被及时释放的关键步骤。在并行处理多个请求时,记得每次执行完请求后,调用 curl_multi_close() 来关闭所有相关的 cURL 连接。这不仅可以防止内存泄漏,还能提升代码的效率。