答案是dns劫持或代理配置冲突导致解析失败,需先用curl和echo交叉验证,再清理代理、绑定hosts、正确配置镜像源(键名repo.packagist、type为composer、url以/结尾)并清缓存。

Composer 报 Could not resolve host 或卡在 Loading composer repositories,大概率不是镜像挂了、也不是 PHP 坏了,而是你的网络环境存在 DNS 解析劫持或代理配置冲突——这两者常同时发生,且互相掩盖问题根源。
确认是不是代理 + DNS 双重污染
别一上来就改 composer.json。先用两行命令交叉验证:
-
curl -Iv http://packagist.org:如果卡在Resolving阶段或报Connection refused,说明 DNS 已被劫持(比如返回127.0.0.1) -
echo $HTTP_PROXY $HTTPS_PROXY(Linux/macOS)或echo %HTTP_PROXY% %HTTPS_PROXY%(Windows):只要任一非空,Composer 就可能被代理干扰,哪怕你没配过http-proxy -
composer diagnose中若显示Repo packagist.org: OK,但composer install -vvv日志里仍出现https://repo.packagist.org/...,说明代理或 hosts 正在静默覆盖配置
代理必须显式配全,缺一个字段就失效
Composer 不读系统 HTTP_PROXY 环境变量,只认自己配置的两个字段,且 HTTPS 流量必须走 https-proxy 字段建立 CONNECT 隧道:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 正确写法:
composer config -g http-proxy http://127.0.0.1:8080和composer config -g https-proxy http://127.0.0.1:8080(注意都是http://开头) - 密码含
@、/、:必须 URL 编码,例如pa@ss/word→pa%40ss%2Fword - 公司 NTLM 代理无法直连?必须用
cntlm或px在本地起中转服务(监听127.0.0.1:3128),再把 Composer 的https-proxy指向它 - 验证是否生效:
composer config -g --list | grep -E "(http|https)-proxy",两行都得有且协议头不能少
DNS 劫持要从 hosts 绑定根治
改系统 DNS(如设成 1.1.1.1)只能临时缓解,CI/CD 或多机部署时不可靠;hosts 是唯一稳解,但三处必须同时做对:
- IP 必须实时获取:
dig mirrors.aliyun.com @223.5.5.5 +short | head -n1,别抄网上过期地址 - 格式严格:
223.5.5.5 mirrors.aliyun.com(空格分隔,不能 Tab、不能中文符号) - 缓存必刷:macOS 执行
sudo dscacheutil -flushcache,Windows 执行ipconfig /flushdns,Linux 执行sudo systemd-resolve --flush-caches - 杀毒软件(如火绒、360)常锁死
hosts文件,保存失败时务必右键编辑器选“以管理员身份运行”
镜像配置写错会导致诊断通过但实际失效
很多人跑 composer diagnose 显示 OK,却仍走原始源,根本原因是键名或结构错误:
- 错误写法:
repos.packagist(多一个s)、repositories.packagist.org(旧版已弃用)、URL 少末尾斜杠(https://mirrors.aliyun.com/composer→ 拼成/composerpackages.json导致 404) - 正确写法(任选其一):
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/或composer config -g repositories.packagist.org '{"type": "composer", "url": "https://mirrors.tuna.tsinghua.edu.cn/composer/"}' - 验证是否真生效:
composer config -g repo.packagist输出应为完整 JSON:{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"} - 项目级配置优先级高于全局,若
composer config repo.packagist有输出,必须先清掉:composer config --unset repo.packagist
最易忽略的是:DNS 劫持和代理配置会相互干扰,比如代理本身用了污染 DNS 做上游,结果 --resolve 也绕不过去;修复时务必先停代理、刷 DNS、绑 hosts、再配镜像,顺序乱了就白忙。










