composer怎么在CentOS安装_CentOS命令行安装composer教程

6次阅读

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

composer怎么在CentOS安装_CentOS命令行安装composer教程

Composer 在 centos 上不能直接用 yum install composer 装——系统仓库里的版本太老,甚至可能根本不存在,装了也跑不起来 laravel 或现代 PHP 项目。

为什么不能用系统包管理器装 composer

CentOS 自带的 EPEL 仓库里确实有 php-composer 包,但它是静态打包的旧版(常为 1.x),不支持 composer.json 里的 ^ 版本约束、插件机制、HTTPS 默认源等基础能力。更关键的是:它依赖系统 PHP 扩展路径,而你手动编译或 SCL 安装的 PHP 往往扩展目录不匹配,一运行就报 class 'Phar' not foundcurl_init(): curl extension is not loaded

实操建议:

  • 彻底放弃 yum install composerdnf install php-composer
  • 确认已安装 PHP CLI 及必要扩展:php -vphp -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 运行用户(如 apachenginx)要调用全局命令,就会因权限或路径问题失败。

实操建议:

  • 避免用 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 能通外网。这些细节不试一次根本想不到。

text=ZqhQzanResources