You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决cURL_multi多URL同时请求仅返回最后一个响应的问题

问题分析与修复方案

代码存在的核心问题

  • 语法错误:$headers数组定义后未添加闭合的);,导致PHP解析代码时出错,后续逻辑无法正常执行。
  • 变量覆盖:遍历响应数组时,使用foreach ($response as $i => $response),循环变量名与原数组名重复,会覆盖原响应数组,最终仅能保留最后一条URL的响应结果。
  • 输出逻辑缺陷:最后仅打印$color[$i],此时$i是最后一次循环的索引,只能输出最后一个URL对应的颜色,无法展示所有URL的结果。

修复后的完整代码

<?php

// 待请求的URL数组
$urls = array(
    'https://example.com/v1/objects/services?service=1', 
    'https://example.com/v1/objects/services?service=2'
);

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

$username = "root";
$password = "apipass";
$headers = array(
    'Accept: application/json',
    'X-HTTP-Method-Override: GET'
); // 修复:添加数组闭合符

// 将每个URL添加到cURL多句柄
foreach ($urls as $i => $url) {
    $ch[$i] = curl_init();
    curl_setopt_array($ch[$i], array(
        CURLOPT_URL => $url,
        CURLOPT_HTTPHEADER => $headers,
        CURLOPT_USERPWD => $username . ":" . $password,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_SSL_VERIFYHOST => 0, 
        CURLOPT_SSL_VERIFYPEER => 0
    ));
    curl_multi_add_handle($mh, $ch[$i]);
}

// 执行多cURL请求
do {
    $status = curl_multi_exec($mh, $active);
} while ($status === CURLM_CALL_MULTI_PERFORM || $active);

// 获取每个请求的响应
$response = [];
foreach ($urls as $i => $url) {
    $response[$i] = curl_multi_getcontent($ch[$i]);
}

// 关闭所有句柄
foreach ($urls as $i => $url) {
    curl_multi_remove_handle($mh, $ch[$i]);
}
curl_multi_close($mh);

// 根据响应设置对应颜色
$color = [];
foreach ($response as $i => $res) { // 修复:修改循环变量名,避免覆盖原数组
    if(strpos($res, "Unreachable") !== false) {
        $color[$i] = 'red';
    } else {
        $color[$i] = 'green';
    }
} 

// 输出所有URL的状态和对应颜色
foreach ($urls as $i => $url) {
    echo "URL: {$url} | 状态颜色: {$color[$i]}\n";
}
?>

修复说明

  1. 补全了$headers数组的闭合符号,解决语法解析错误。
  2. 修改响应遍历的循环变量名为$res,避免覆盖原$response数组,确保能保留所有URL的响应结果。
  3. 调整输出逻辑,遍历所有URL和对应的颜色,完整展示每个请求的结果。

内容的提问来源于stack exchange,提问作者tata

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 11:25:55