Composer 能否成功安装取决于 PHP 环境是否完备:需启用 openssl、zlib、json、mbstring 四扩展,curl 可用,PHP 路径与权限正确,安装脚本须校验 SHA384,全局镜像配置须用当前用户执行,且 composer 必须与目标 PHP 实例一致。

Composer 能不能装上,关键不在命令对不对,而在 PHP 环境有没有真正准备好——缺一个扩展、路径没对齐、权限或镜像配错,都会卡在 composer --version 报错那一步。
检查 PHP 是否满足 Composer 最低要求
不是只要 php -v 能输出版本就行。Composer(尤其 2.x+)明确要求:openssl、zlib、json、mbstring 四个扩展必须启用,且 curl 命令可用。CentOS 7 默认的 PHP(如 5.4 或某些 remi 源未全装的 7.4)常缺 php-mbstring 或 php-process,导致后续报 problem 1 - installation request 这类模糊错误。
- 运行
php -m | grep -E "openssl|zlib|json|mbstring",四行都得有输出 - 如果缺
mbstring,用 remi 源装 PHP 7.4 时得补:yum install php74-php-mbstring(注意包名前缀要和你装的 PHP 版本一致) - 如果用的是
/usr/bin/php,但实际 CLI 走的是/opt/remi/php74/root/usr/bin/php,which php和php -v可能不一致——此时 composer 安装后执行会提示/usr/bin/env: php: No such file or directory
下载安装脚本必须校验 SHA384,别跳过
直接 curl -sS https://getcomposer.org/installer | php 看似快,但一旦网络中断或 CDN 缓存异常,得到的 composer-setup.php 可能是截断或损坏的,后面执行 php composer-setup.php 会静默失败,或生成不可用的 composer.phar。官方签名已迁移到 GitHub,校验步骤不能省。
- 先下载:
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" - 再取签名:
HASH=$(wget -q -O - https://composer.github.io/installer.sig) - 最后校验并清理:
php -r "if (hash_file('sha384', 'composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
设为系统命令时 PATH 和权限必须同时生效
很多人 mv composer.phar /usr/local/bin/composer 后就以为完事了,结果新终端里敲 composer 提示 command not found。根本原因有两个:/usr/local/bin 不在当前用户的 $PATH 里,或者没加可执行权限。
立即学习“PHP免费学习笔记(深入)”;
- 确认路径已包含:运行
echo $PATH,看输出里有没有/usr/local/bin(CentOS 7 默认有,但如果你用非 root 用户或自定义 shell,可能没有) - 必须加执行权限:
sudo chmod +x /usr/local/bin/composer(只mv不chmod,Linux 下无法直接执行) - 如果改过
~/.bashrc或/etc/profile,记得重载:source ~/.bashrc,否则新开终端还是看不到
配置国内镜像前先确认用户上下文
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 这条命令看着简单,但 -g 是全局配置,写入的是当前用户的 ~/.composer/config.json。如果你用 sudo composer 执行,它读的是 root 的配置;而日常开发用普通用户跑,读的是自己的配置——镜像就白配了。
- 一律用当前开发用户执行镜像配置,不要加
sudo - 验证是否生效:
composer config -g repo.packagist应该返回阿里云地址 - 如果之前用 root 配过,又切回普通用户,记得删掉 root 的配置文件避免干扰:
sudo rm -rf /root/.composer
最常被忽略的一点:Composer 不是独立程序,它完全依赖当前 shell 调用的 php 可执行文件。换 PHP 版本(比如从 7.4 切到 8.1)、换 SCL 环境、或用了 phpbrew,都得重新确认 which php 和 composer --version 背后用的是同一个 PHP 实例——否则扩展缺失、版本不兼容、甚至 file_get_contents(): php_network_getaddresses: getaddrinfo failed 这类报错,根源都在这儿。











