composer卡在resolving dependencies时,问题出在dns或链路层mtu不匹配,需先验证并调低mtu至1400,再同步调整http.timeout=600及default_socket_timeout。

Composer 本身不参与 ICMP(ping)探测,ping packagist.org 失败时,它甚至还没开始工作——此时调任何 composer config 都无效,必须从系统网络栈入手。
ping不通就别碰 http.timeout,先查 DNS 和路由链路
当 ping packagist.org 返回 unknown host,说明系统卡在 DNS 解析;返回 Connection timed out 或无响应,则是 TCP 层无法建连。这两种情况,http.timeout 完全不生效,因为 Composer 还没发第一个 HTTP 请求。
- Linux/macOS:临时加 DNS:
echo "nameserver 8.8.8.8" | sudo tee -a /etc/resolv.conf,然后nslookup packagist.org验证是否出 IP - Windows:进“网络适配器 → IPv4 属性 → 使用以下 DNS”,填
114.114.114.114或8.8.8.8 - 若
nslookup成功但curl -v https://mirrors.aliyun.com/composer/卡在* Connected to后,大概率是 TLS 握手被中间设备阻断,可加CURL_IPRESOLVE=4强制走 IPv4
curl -v 卡在 * Connected to 之后?MTU 不匹配是元凶
现象是 curl -v https://mirrors.aliyun.com/composer/packages.json 停在 * Connected to mirrors.aliyun.com (123.56.123.45) port 443 (#0) 无后续,且 ping -s 1472 -M do mirrors.aliyun.com 通、ping -s 1473 超时,基本锁定 MTU 分片失败。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- Linux/macOS 临时修复:
sudo ifconfig eth0 mtu 1400(把eth0换成你实际网卡名) - Windows 管理员 CMD:
netsh interface ipv4 set subinterface "以太网" mtu=1400 store=persistent - 别设低于 1280——会影响 IPv6 和某些云服务;1400 是国内运营商链路兼容性最佳值
- MTU 调低后,
curl -v若仍卡在 TLS 握手,再设composer config -g http.timeout 600,否则白调
process-timeout 和 http.timeout 的真实作用边界
这两个参数常被混用,但它们控制的阶段完全不同,错配会导致“调了等于没调”:
-
http.timeout:只管单次 HTTP 请求的“连接建立 + 响应头到达”总耗时(单位秒),默认 60。卡在Downloading https://...时才起作用 -
process-timeout:控制整个命令生命周期,比如git clone、unzip、post-install-cmd执行总时长,默认 300。卡在Executing command或Generating autoload files时才轮到它 - PHP CLI 的
default_socket_timeout会覆盖http.timeout,检查:php -i | grep default_socket_timeout,若为 60,需同步调高:php -d default_socket_timeout=600 $(which composer) install
镜像源配置优先级和末尾斜杠陷阱
换源不是设完就生效,Composer 查找源的顺序是:项目 composer.json 中的 repositories > 全局 repo.packagist > 默认官方源。常见失效原因全是配置细节:
- 阿里云镜像地址必须带末尾斜杠:
https://mirrors.aliyun.com/composer/,少一个就会 404 并悄悄回退到官方源 - 项目
composer.json里写了"packagist.org": false或自定义repositories,会完全绕过全局镜像 - 私有包用的是
git@github.com:xxx/yyy.git,镜像不代理,得单独配 SSH 或 HTTPS 代理 - 设完必须清缓存:
composer clear-cache,否则旧缓存里的错误地址还在内存中
真正麻烦的不是 timeout 值本身,而是网络路径中某一段(DNS、TLS、MTU、镜像节点路由)出现非对称延迟——它可能只影响某个包、某个时刻。所以调到 600 还超时,第一反应不该是继续拉长 timeout,而是立刻 curl -v 和 ping -M do 定位卡点。










