结论:别用 curl_ipresolve=4,它在 composer 中大概率失效;应优先设置 composer_no_ipv6=1 或 use-ipv4=true,并搭配阿里云镜像。因 curl_ipresolve=4 依赖 curl 版本、php 编译选项及客户端类型,而 composer_no_ipv6=1 在 dns 解析层直接过滤 ipv6,更底层、更可靠;换源+强制 ipv4 才能彻底规避路由异常。

直接说结论:别碰 CURL_IPRESOLVE=4,它在 Composer 里大概率不生效;优先用 COMPOSER_NO_IPV6=1 或 COMPOSER_IPV4=1,配合阿里云镜像才真正稳。
为什么 CURL_IPRESOLVE=4 经常失效
这个环境变量看似通用,但实际起效条件非常苛刻:
- PHP 必须启用 cURL 扩展,且
curl_version()['features'] & CURL_VERSION_IPV6返回非零值(说明编译时支持 IPv6) - libcurl 版本必须 ≥ 7.19.4;低于此版本该选项被完全忽略
- Composer 2.2+ 默认用 cURL,但如果你启用了自定义 HTTP 客户端(比如 Guzzle),
CURL_IPRESOLVE就彻底失效 - 它只影响底层 cURL 行为,而 Composer 的 DNS 解析阶段(如包地址解析)早已走完,IPv6 地址可能已经拿到并开始连接了
COMPOSER_NO_IPV6=1 是最底层、最可控的方式
这个变量是 Composer 自己在域名解析阶段就过滤掉所有 IPv6 地址,不依赖 cURL 或 PHP 流上下文,也不管你用的是什么 HTTP 客户端。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- Linux/macOS 临时生效:
COMPOSER_NO_IPV6=1 composer install - Windows PowerShell:
$env:COMPOSER_NO_IPV6="1"; composer install - 全局生效(推荐):
composer config -g use-ipv4 true(Composer 2.2+ 原生支持) - 旧版 Composer(1.x)只能靠环境变量,
use-ipv4配置项无效
换镜像 + 强制 IPv4 才是完整闭环
只禁 IPv6 不换源,还是得连境外节点,延迟和失败率依然高。阿里云镜像本身已做协议适配,再叠加 IPv4 控制,才能彻底避开 IPv6 路由异常。
- 全局换源:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 验证是否真走 IPv4:
ping mirrors.aliyun.com,输出应为类似118.31.67.205的地址,而非240e::开头 - 别用已停服的 Laravel China 镜像(
https://packagist.phpcomposer.com),自 2025 年底起不可用 - 腾讯云、华为云镜像虽可用,但阿里云同步延迟更低、节点更稳定
别改系统级 IPv6 设置,也别动 /etc/gai.conf
临时禁用系统 IPv6(如 sysctl -w net.ipv6.conf.all.disable_ipv6=1)会影响其他工具,比如 Git、Docker、npm,甚至 SSH;/etc/gai.conf 的修改只在部分 Linux 发行版生效,macOS 不支持,且优先级不如 Composer 层干预直接。
真正起效的永远是「让域名解析不出 IPv6 地址」,而不是教 Composer 学会选路——这点最容易被忽略,也是多数人反复踩坑的根源。










