根本原因是国内网络拦截或超时导致https://getcomposer.org/installer无法访问;应手动下载GitHub Release页面的composer.phar文件,校验SHA256后覆盖原文件,并确认路径与权限。

Composer 自更新失败:根本原因是 https://getcomposer.org/installer 被拦截或超时
国内多数网络环境(尤其企业/教育网)会阻断或限速访问 getcomposer.org 域名,导致 composer self-update 卡在下载最新 Phar 的阶段,错误常表现为:cURL error 28: Operation timed out 或 SSL certificate problem。这不是 Composer 本身的问题,而是网络策略导致的「下载通道中断」。
- 别试
composer self-update --snapshot—— 它走的仍是同一域名,一样失败 - 别改
COMPOSER_HOME或删缓存目录 —— 这些不影响 Phar 下载环节 - 真正要绕过的,是
self-update内部调用的远程 installer 获取逻辑
手动下载最新 Phar:认准官方 GitHub Release 页面
Composer 的稳定版 Phar 文件全部托管在 GitHub Releases,地址固定为:https://github.com/composer/composer/releases。每次发布都会附带 composer.phar 文件(不是 zip 包里的源码),这才是可直接替换的二进制文件。
- 优先选 latest tagged release(如
v2.7.7),不要用main分支构建的 snapshot - 下载后校验 SHA256(页面下方有 hash 值),避免中间劫持:
shasum -a 256 composer.phar - Windows 用户注意:不要用浏览器「另存为」下载,某些浏览器会自动加 .zip 后缀;建议用
curl -o composer.phar https://github.com/.../composer.phar
替换本地 composer.phar 的安全路径和权限
Composer 可执行文件位置取决于安装方式。常见路径有三类:/usr/local/bin/composer(全局 symlink)、~/.composer/composer.phar(旧版)、或你当初用 php -r "copy(...)" 放的位置。必须确认当前生效的是哪一个。
- 运行
which composer查看命令指向;再用ls -l $(which composer)看是否为 symlink - 如果是 symlink(比如指向
/home/user/.composer/composer.phar),直接覆盖目标文件即可 - 如果是独立二进制(如
/usr/local/bin/composer),需sudo mv composer.phar /usr/local/bin/composer并sudo chmod +x /usr/local/bin/composer - 替换后务必运行
composer --version验证,且检查composer diagnose是否报 SSL 或 CA 错误(可能需额外配置 cafile)
后续使用中仍可能触发网络请求的隐藏点
即使 Phar 替换成功,Composer 在日常使用中仍有几个地方会主动联网,若网络受限,仍会卡住或报错:
-
composer create-project默认从 packagist.org 拉取元数据 —— 可提前配置镜像:composer config -g repo.packagist composer https://packagist.phpcomposer.com(注意该镜像已停用,推荐https://mirrors.aliyun.com/composer/) -
composer require时若没加--no-plugins,部分插件(如hirak/prestissimo)会尝试升级自身,再次触发下载 - PHP 8.2+ 环境下,若系统未预装 CA 证书(如 Alpine Linux),
openssl.cafile未配置会导致所有 HTTPS 请求失败,需手动指定:export COMPOSER_CAFILE=/etc/ssl/certs/ca-certificates.crt
手动维护 Composer 的关键,是分清「Phar 更新」和「包管理行为」——前者只需一次精准替换,后者需要持续适配网络环境。很多人反复重装,其实是把两个问题混在一起折腾。











