curl -I 验证镜像连通性比 composer diagnose 更准,因其直测真实地址如 https://mirrors.aliyun.com/composer/packages.json 是否返回 200,而 diagnose 仅检查配置格式、不发真实请求,无法暴露 DNS、TLS 或镜像服务本身问题。

curl -I 验证镜像连通性比 composer diagnose 更准
composer diagnose 只检查配置格式和缓存路径,不发真实请求。真正卡住的往往是 DNS、TLS 或镜像服务本身问题,必须用 curl -I 直测。
运行:curl -I https://mirrors.aliyun.com/composer/packages.json,应秒级返回 HTTP/2 200;若超时、返回 404 或 SSL connect error,说明问题不在 Composer 配置,而在网络链路或证书。
- 返回
Could not resolve host:DNS 污染,需用dig mirrors.aliyun.com @223.5.5.5 +short查 IP,再用curl --resolve绕过 DNS - 返回
SSL certificate problem:PHP 的curl.cainfo未设对,或系统时间偏差 >5 分钟 - 返回
404:URL 少了末尾斜杠/,或镜像地址写成http://(阿里云已停用 HTTP)
composer config -g repo.packagist 不生效?键名和参数缺一不可
Composer 2.2+ 已弃用 repo.packagist 写法,必须用 repositories.packagist.org,且 .type 和 .url 必须分两行独立设置,漏任何一项都静默失效。
正确命令是:
composer config -g repositories.packagist.org.type composer composer config -g repositories.packagist.org.url https://mirrors.aliyun.com/composer/
-
url末尾必须带/,否则请求路径拼成/packages.json会变成/p2/packages.json类错误路径 - 别写成
repos.packagist(多一个 s)、repo.packagist.org(拼错)或漏掉-g(只改当前项目) - 验证是否写入:执行
composer config -g repositories.packagist.org.url,输出应为完整 URL 字符串
明明配了镜像还走 packagist.org?项目级 repositories 覆盖全局
只要项目根目录 composer.json 含 "repositories" 字段(哪怕空对象 {} 或 "packagist.org": false),全局镜像就彻底失效——这是 Composer 设计行为,不是 bug。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
排查方法:
- 运行
grep -A5 '"repositories"' composer.json看是否被定义 - 临时清除:执行
composer config --unset repositories(注意无-g) - 清除后仍无效?删掉
composer.lock和vendor/,再重试composer install
CI/CD 环境(如 GitHub Actions)默认不继承本地配置,必须在 workflow 中显式执行镜像设置命令。
Connection refused 或卡住 30 秒?别调 process-timeout,改 COMPOSER_NETWORK_TIMEOUT
process-timeout 控制整个命令生命周期(含解压、脚本执行),对 TCP 连接失败类错误完全无效。真正起作用的是环境变量 COMPOSER_NETWORK_TIMEOUT,它透传给 cURL 的 CURLOPT_TIMEOUT。
- 默认值仅 60 秒,国内常见 DNS 波动或 TLS 握手慢,建议设为
300:COMPOSER_NETWORK_TIMEOUT=300 composer install - 必须配合镜像切换与缓存清理:
composer clear-cache不做,旧缓存仍会尝试访问原地址 - Git 克隆阶段报错(如
Cloning into 'vendor/xxx')跟 Composer 超时无关,要查git config --get http.timeout并设为 300
复杂点在于:DNS、TLS、PHP 扩展、镜像 URL 格式、项目级配置、缓存状态,五者任一出错都会表现为“镜像不生效”,但修复路径完全不同。最容易被忽略的是 composer.json 里那个空的 "repositories": {} —— 它不报错,只悄悄关掉所有全局镜像。

















