Composer 1.x 不支持 HTTPS 镜像源是因未实现完整 HTTPS 校验逻辑,遇 https:// 地址会静默挂起;升级至 2.x 后需确保键名 repositories.packagist.org、URL 末尾带 /、执行 clear-cache,并排除项目级 repositories 覆盖。

Composer 1.x 确实不支持 HTTPS 镜像源
不是配置错了,是旧版根本没实现 HTTPS 协议栈的完整校验逻辑。Composer 1.10.22 及更早版本在遇到 https://mirrors.aliyun.com/composer/ 这类地址时,会卡在 Loading composer repositories with package information… 无限等待,底层 cURL 不报错也不超时,只是静默挂起。
常见诱因:
- CI 脚本用
curl -sS https://getcomposer.org/installer | php拉取最新版,但实际下载的是 1.x 最后一个稳定版(如 1.10.22),而非 2.x - 本地开发机手动安装过旧版,
composer --version显示version 1.10.22,却误以为“已最新” - 执行
composer self-update后仍显示 1.x —— 因为 Homebrew 2.5.0+ 已移除该命令,必须卸载重装
验证方式:运行 composer --version,若输出含 1.x 字样,就别折腾 HTTPS 镜像了,先升级。
升级到 Composer 2.x 后 HTTPS 镜像仍失败?检查这三处
升级后报 Could not fetch 或 file could not be downloaded,大概率不是镜像问题,而是协议或路径细节不匹配。
必须核对:
-
https://mirrors.aliyun.com/composer/末尾必须带/,少一个斜杠会拼出/composerpackages.json导致 404 - 全局配置键名必须是
repositories.packagist.org(不是repo.packagist,也不是repos.packagist) - 执行
composer clear-cache后再试 —— 旧缓存里的 HTTP 元数据不会自动降级为 HTTPS
临时验证是否走镜像:运行 composer show monolog/monolog -vvv 2>&1 | grep "Downloading",看日志里出现的是 mirrors.aliyun.com 还是 packagist.org。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
HTTPS 证书错误?别急着关验证,先修证书链
报 cURL error 60 或 SSL certificate problem,不是镜像站证书过期,而是你本地 PHP 的 OpenSSL 信任库陈旧。
修复路径:
- Windows:下载最新
cacert.pem,在php.ini中设置curl.cainfo = "C:\path\to\cacert.pem",重启 CLI 或 Web 服务 - macOS(Homebrew):
brew update && brew upgrade openssl ca-certificates && brew reinstall php - Linux(Ubuntu/Debian):
sudo apt update && sudo apt install --reinstall ca-certificates
注意:PHP 内置 cURL 和系统 curl 使用两套 CA 路径,curl -I https://packagist.org 正常 ≠ Composer 正常。用 php -r "print_r(openssl_get_cert_locations());" 查 PHP 实际读取的证书路径。
项目级配置覆盖全局 HTTPS 镜像
即使 composer config -g repositories.packagist.org 返回正确 JSON,只要项目根目录 composer.json 里有 "repositories" 字段,全局镜像就完全失效。
排查方法:
- 运行
grep -A3 '"repositories"' composer.json,确认没有残留的"packagist.org": false或空数组 - 若有,删掉整个
"repositories"块 —— 不要留空数组,否则 Composer 会 fallback 到默认源 - 已有
composer.lock时,旧文件固化了包地址,必须删掉vendor/和composer.lock再composer install
团队协作时,最容易被忽略的是:CI 流水线用的 Docker 镜像锁定了 Composer 1.x,而本地是 2.x,同一份 composer.json 在两边行为完全不同 —— CI 脚本里务必显式指定 php composer.phar self-update --2。

















