
多数 composer update 失败不是因为网络“完全不通”,而是请求被阻断、响应异常或本地配置冲突。最常触发失败的是源(repository)不可达、TLS 证书校验失败、PHP 扩展缺失,以及 composer.json 中约束过于严格导致无解依赖图。
这是国内用户最常遇到的错误,表现为 cURL error 60: SSL certificate problem: unable to get local issuer certificate。本质是 Composer 使用的 cURL 无法验证 HTTPS 证书链,尤其在 Windows 或某些 Linux 发行版上默认不带完整 CA 包。
composer config -g secure-http false + composer config -g github-protocols https,但会降低安全性,不建议长期启用php.ini 中设置 curl.cainfo = "/path/to/cacert.pem",重启 PHP CLIphp.ini 是两个文件,必须改对 CLI 对应的那个packagist.org 官方源在国内直连不稳定,且自 2023 年起已默认禁用 HTTP 协议,强制 HTTPS;同时部分镜像(如阿里云、腾讯云)已停止维护或变更域名,旧配置会直接 404。
composer config -g repo.packagist,确认是否仍指向已失效镜像(如 https://mirrors.aliyun.com/composer/)composer config -g repo.packagist composer https://mirrors.huaweicloud.com/repository/php/
composer.json 中的 repositories 顺序合理——私有源应放在 packagist 前,并设 "type": "composer" 和 "packagist.org": false
错误信息如 Your requirements could not be resolved to an installable set of packages 或 PHP Fatal error: Allowed memory size exhausted,说明问题不在网络,而在本地环境或约束逻辑。
COMPOSER_MEMORY_LIMIT=-1 composer update(-1 表示不限制)composer why-not vendor/package:version 查具体哪个包在阻止升级;再用 composer prohibits vendor/package:version 反向查谁依赖了冲突版本update:生产环境应优先用 composer install;仅当明确要升级某包时,用 composer update vendor/package 精确更新,减少求解范围真正难排查的往往是复合问题:比如 TLS 校验失败后 Composer 自动 fallback 到 HTTP,而 HTTP 又被防火墙拦截,最终报错却只显示超时。建议按「网络协议 → 源配置 → 依赖逻辑」三层顺序验证,别一上来就删 vendor 和 composer.lock。