答案是运行composer config --list | grep repositories.packagist.url可查看真正生效的镜像源;若为空,则说明未配置或被项目级repositories字段完全覆盖,且新版Composer(2.2+)正确键名为repos.packagist.org而非repo.packagist。

确认当前生效的镜像源到底是哪个
很多人改了全局配置却没生效,是因为项目级 composer.json 里的 repositories 字段会完全屏蔽全局设置。运行 composer config --list | grep repositories.packagist.url 才能看到真正起作用的地址;如果返回为空,说明你根本没配上,或者被项目配置覆盖了。
常见陷阱:
-
composer config -g repo.packagist输出正常 ≠ 实际生效(项目里写了"repositories": []就直接失效) - 拼写错误:
repos.packagist(复数)才是 Composer 2.2+ 的正确键名,repo.packagist在新版里静默忽略 - 旧模板残留:
"url": "https://packagist.phpcomposer.com"已停用,但仍在某些composer.json里存在,导致请求 404 卡死
验证镜像源是否真同步了你要的包
别只看网页,直接查元数据接口最准。比如要装 monolog/monolog v3.6.0,执行:
curl -s https://mirrors.aliyun.com/composer/p2/monolog/monolog.json | jq -r '.packages."monolog/monolog" | keys[]' | sort | tail -3
对比官方源输出:
curl -s https://packagist.org/p2/monolog/monolog.json | jq -r '.packages."monolog/monolog" | keys[]' | sort | tail -3
如果镜像源缺了最新版,就是同步延迟。此时:
- 检查
curl -I https://mirrors.aliyun.com/composer/packages.json是否返回HTTP/2 200 - 若返回
SSL certificate problem,问题不在镜像,而在 PHP 的 CA 证书(见下节) - 阿里云/华为镜像通常 5–30 分钟同步,新包发布后等不及就别硬等
强制刷新元数据缓存,而不是清整个 cache
composer clear-cache 没用——它删的是 ZIP 包和部分 JSON,但 packages.json 缓存默认 15 分钟不过期,下次 update 还是读旧数据。真正该做的是:
Composer ≥ 2.5:直接运行 composer update --refresh,它只丢弃 packages.json 和 provider-*.json,不碰已下载的包,快且精准。
Composer ≤ 2.4:手动删对应缓存目录,路径由当前镜像 URL 转义而来,例如:
rm -rf $(composer config --global cache-dir)/repo/https---mirrors-aliyun-com-composer
注意:https://mirrors.aliyun.com/composer/ 被转义为 https---mirrors-aliyun-com-composer,不是简单替换斜杠。
CA 证书过期会导致所有镜像“连不上”
构建失败报 SSL certificate problem: unable to get local issuer certificate,不是镜像问题,是 PHP 底层信任库陈旧。先跑这三行定位:
php -r "print_r(openssl_get_cert_locations());"<br>curl -v https://packagist.org/packages.json<br>php --ini
关键看 default_cert_file 路径是否存在、文件是否为空或最后修改时间早于 2023 年。Windows 下尤其容易翻车:
- 路径必须用正斜杠
/或双反斜杠\,单反斜杠会被当转义符 - 别用 PHP 自带的
curl-ca-bundle.crt,它停更于 2021 年,不认 ISRG Root X1 -
curl.cainfo和openssl.cafile必须设为同一文件路径,且重启 CLI 环境才生效
Linux/macOS 更推荐系统级更新:sudo apt install --reinstall ca-certificates 或 brew reinstall ca-certificates,比单独配 php.ini 更可靠。


















