Composer安装失败主因是本地环境或网络问题,需依次排查:①curl/php命令是否存在及版本(PHP≥7.2.5、curl可用);②SSL证书验证失败时更新CA或配置代理;③校验installer签名是否匹配官网SHA-384值;④临时目录权限是否正常且未被杀软拦截。

Composer 安装失败不是 Composer 本身的问题,绝大多数情况是本地环境或网络策略导致的——先别删重装,按顺序查这四点。
curl 或 php 命令不可用或版本过低
安装脚本本质是用 curl 下载安装器,再用 php 执行。任一缺失或版本太老都会卡在第一步。
- 运行
which curl和which php,确认命令存在;Windows 用户检查是否已将php.exe和curl.exe加入系统 PATH - 执行
php -v,确保 PHP ≥ 7.2(Composer 2.x 要求 ≥ 7.2.5;PHP 8.0+ 更稳妥) - 执行
curl --version,若报错或输出为空,说明未安装或被防火墙拦截;macOS 可用brew install curl,Windows 推荐直接下载含 curl 的 PHP 集成包(如 XAMPP、WAMP) - 某些 Linux 发行版默认不带
curl(如最小化 CentOS),需手动yum install curl或apt install curl
SSL 证书验证失败或 HTTPS 被拦截
官方安装地址 https://getcomposer.org/installer 强制 HTTPS,国内部分企业网络、代理或旧 OpenSSL 会拒绝校验。
- 临时绕过验证(仅排查用):
php -r "copy('http://getcomposer.org/installer', 'composer-setup.php');"→ 但不推荐长期使用 HTTP - 更安全的做法:更新 CA 证书包,Linux/macOS 运行
sudo update-ca-certificates或brew install ca-certificates;Windows 用户可尝试切换到最新版 OpenSSL(如 Git for Windows 自带) - 若使用代理,确认代理支持 CONNECT 隧道,并设置环境变量:
export https_proxy=http://127.0.0.1:8080(注意是https_proxy,不是http_proxy) - 错误典型提示:
cURL error 60: SSL certificate problem或unable to get local issuer certificate
安装脚本校验失败(Installer signature mismatch)
Composer 官方要求对下载的 installer 文件做 SHA-384 校验,任何中间篡改(如镜像源替换不当、CDN 缓存污染)都会触发失败。
- 不要手动修改安装命令中的哈希值;务必从 官网下载页 复制最新
EXPECTED_SIGNATURE - 避免使用非官方一键脚本(尤其某些中文教程里的“国内加速版”),它们常跳过校验或硬编码旧哈希
- 手动校验方式:
php -r "echo hash_file('sha384', 'composer-setup.php');",对比输出是否与官网一致 - 若用国内镜像,应只配置安装后
composer config -g repo.packagist composer https://packagist.phpcomposer.com类型的源,而非替换安装器下载地址
权限不足或 tmp 目录不可写
安装过程需在临时目录解压、写入 composer.phar,Linux/macOS 下常见于 root 权限误用或 /tmp 挂载为 noexec。
- 禁止用
sudo php composer-setup.php全局安装(会导致后续权限混乱);应普通用户执行,再手动移动:mv composer.phar /usr/local/bin/composer - 检查
php -i | grep 'upload_tmp_dir\|sys_temp_dir',确认返回路径可写;也可临时指定:php -d sys_temp_dir=/path/to/writable/dir composer-setup.php - macOS 上若用 Homebrew 安装 PHP,
/tmp可能被 SIP 限制,建议改用$HOME/tmp - Windows 用户注意:杀毒软件(尤其 360、腾讯电脑管家)可能拦截
.phar文件生成,临时关闭或添加信任
真正难排查的往往不是哪一步错了,而是多个小问题叠加——比如 PHP 版本够但 OpenSSL 不支持 TLS 1.2,或 curl 可用但被公司代理静默重定向到内网页面。建议每步验证输出,而不是只看最终是否生成 composer.phar。









