不能用 yum 安装 composer,因 epel 中的 php-composer 为过时的 1.x 版,不支持 ^ 版本约束、插件及 https 源,且 php 扩展路径不匹配易报错;应使用官方安装脚本。

Composer 在 CentOS 上不能直接用 yum install composer 装——系统仓库里的版本太老,甚至可能根本不存在,装了也跑不起来 Laravel 或现代 PHP 项目。
为什么不能用系统包管理器装 composer
CentOS 自带的 EPEL 仓库里确实有 php-composer 包,但它是静态打包的旧版(常为 1.x),不支持 composer.json 里的 ^ 版本约束、插件机制、HTTPS 默认源等基础能力。更关键的是:它依赖系统 PHP 扩展路径,而你手动编译或 SCL 安装的 PHP 往往扩展目录不匹配,一运行就报 Class 'Phar' not found 或 curl_init(): curl extension is not loaded。
实操建议:
- 彻底放弃
yum install composer和dnf install php-composer - 确认已安装 PHP CLI 及必要扩展:
php -v、php -m | grep -E 'curl|openssl|json|phar|zlib' - 若用 SCL(如
rh-php74),先启用环境:scl enable rh-php74 bash,再执行后续步骤
用官方安装脚本装最新稳定版 composer
这是最可靠的方式,绕过包管理器,直连 Composer 官方分发逻辑,自动适配当前 PHP 环境。
实操建议:
- 下载并校验安装脚本:
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" - 验证 SHA-384 签名(必须做,防中间人劫持):
php -r "if (hash_file('sha384', 'composer-setup.php') === 'dac665fdc30fdd8ec78b38b9800061b4150413ff2e3b6f88543c636f7cd84f6db9189d43a81e5503cda447da73c7e5b6dc979d75a3201b01058082ac4ba6544122') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"(签名值请以 getcomposer.org/download 页面实时为准) - 执行安装:
php composer-setup.php --install-dir=/usr/local/bin --filename=composer - 验证:
composer --version应输出类似Composer version 2.7.7
composer 权限和全局使用要注意什么
装到 /usr/local/bin/composer 后,普通用户能运行,但执行 composer global require 时会默认写入 ~/.composer,如果 PHP 运行用户(如 apache 或 nginx)要调用全局命令,就会因权限或路径问题失败。
实操建议:
- 避免用
sudo composer global require—— 这会让包装进 root 的~/.composer,web 进程无法读取 - 设好
COMPOSER_HOME环境变量(如在/etc/profile.d/composer.sh中加export COMPOSER_HOME="/var/www/.composer"),再给该目录授予权限:chown -R apache:apache /var/www/.composer - 检查
open_basedir是否限制了/tmp—— Composer 临时解包依赖时会用到,被禁会导致failed to open stream: Operation not permitted
真正麻烦的不是装不上,而是装完发现 composer install 卡在 Loading composer repositories with package information —— 这八成是 CentOS 默认没开 IPv6 或 DNS 不稳,得在 ~/.composer/config.json 里加 "github-protocols": ["https"] 并确保 curl 能通外网。这些细节不试一次根本想不到。










