当前位置: 首页> 最新文章列表> 详解 curl_multi_add_handle 添加句柄后,如何正确执行请求并处理返回结果?

详解 curl_multi_add_handle 添加句柄后,如何正确执行请求并处理返回结果?

gitbox 2025-08-23
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 这部分与文章内容无关,可以是初始化或者其他设置</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"初始化 PHP 环境...\n"</span></span><span>;
</span><span><span class="hljs-variable">$version</span></span><span> = </span><span><span class="hljs-title function_ invoke__">phpversion</span></span><span>();
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"当前 PHP 版本: <span class="hljs-subst">$version</span></span></span><span>\n";
</span><span><span class="hljs-meta">?></span></span><span>

<hr>

</span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 文章正文开始</span></span><span>

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<h1>详解 curl_multi_add_handle 添加句柄后,如何正确执行请求并处理返回结果?</h1>"</span></span><span>;

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<p>在 PHP 中,使用 <code>cURL
'; echo "

2. 初始化 cURL 多句柄管理器

"
; echo "

然后,初始化一个多句柄管理器 curl_multi_init()

"
; echo '
<span class="fun">$mh = curl_multi_init();</span>
'
; echo "

3. 将单个句柄添加到多句柄管理器

"
; echo "

使用 curl_multi_add_handle() 将每个单句柄加入管理器:

"
; echo '
curl_multi_add_handle($mh, $ch1);
curl_multi_add_handle($mh, $ch2);
'
;
echo "

4. 执行并发请求

"
; echo "

添加完成后,需要循环执行 curl_multi_exec() 直到所有请求完成:

"
; echo '
$running = null;
do {
    $status = curl_multi_exec($mh, $running);
    // 可选: 等待文件描述符变化,减少 CPU 占用
    curl_multi_select($mh);
} while ($running > 0);
'
;
echo "

5. 获取返回结果

"
; echo "

请求完成后,可以使用 curl_multi_getcontent() 获取每个句柄的返回内容:

"
; echo '
$response1 = curl_multi_getcontent($ch1);
$response2 = curl_multi_getcontent($ch2);

echo "Response 1: " . $response1 . "\n";
echo "Response 2: " . $response2 . "\n";
'
;
echo "

6. 移除并关闭句柄

"
; echo "

最后,必须清理资源,先从多句柄管理器移除,再关闭单句柄和多句柄:

"
; echo '
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);

curl_close($ch1);
curl_close($ch2);
curl_multi_close($mh);
'
;
echo "

总结

"
; echo "

使用 curl_multi_add_handle 后,正确执行并获取结果的关键步骤是:

"
; echo "
  1. 创建独立 cURL 句柄并设置返回选项。
  2. 初始化多句柄管理器。
  3. 将句柄添加到管理器中。
  4. 循环执行 curl_multi_exec 直到完成。
  5. 使用 curl_multi_getcontent 获取结果。
  6. 移除并关闭句柄,释放资源。
"
;
echo "

掌握这些步骤,你就可以高效地进行并发 HTTP 请求,同时保证返回数据被正确处理。

"
; ?>