Composer在CentOS 7上正常运行必须启用openssl、zlib、json、mbstring四个PHP扩展,缺一则导致composer --version报错或退出;需用php -m逐项验证,CentOS 7中包名随PHP版本变化(如php74-php-mbstring),且PHP CLI路径与环境变量必须对齐,安装前须校验SHA384签名,断网环境下仅支持composer install离线还原。

PHP 扩展是否齐全:openssl、zlib、json、mbstring 缺一不可
断网环境下,composer --version 报错或直接退出,大概率不是 Composer 本身问题,而是 PHP 缺扩展。官方明确要求这四个扩展必须启用,否则连基础 autoload 都失败。
执行以下命令逐项验证:
-
php -m | grep openssl—— 必须有输出,否则 HTTPS 包下载、签名校验全挂 -
php -m | grep zlib—— 影响 ZIP 包解压,composer install时会卡在“extracting”阶段 -
php -m | grep json——composer.json解析依赖此扩展,缺失则报JSON decode error -
php -m | grep mbstring—— Laravel、Symfony 等主流框架的自动加载器强依赖它,缺了会触发Class not found或Invalid argument supplied for foreach()
CentOS 7 常见陷阱:php-mbstring 包名随 PHP 版本变化(如 php74-php-mbstring),用 yum list installed | grep mbstring 确认实际安装包名。
PHP CLI 路径与环境变量是否对齐
断网机房常存在多套 PHP 共存(如系统默认 PHP 5.4 + remi 源装的 PHP 7.4),但 which php 和 php -v 输出不一致,会导致 Composer 安装后执行时报 /usr/bin/env: php: No such file or directory。
检查方式:
-
which php→ 查看 shell 调用的是哪个二进制 -
php -r "echo PHP_BINARY;"→ 查看 PHP 内部认定的自身路径 -
ls -l $(which php)→ 看是否为软链接,指向是否真实存在
若不一致,要么统一 PATH,要么安装 Composer 时显式指定 PHP 路径:/opt/remi/php74/root/usr/bin/php composer-setup.php。
安装脚本 SHA384 校验不能跳过,哪怕离线也要提前备好
断网机房无法实时拉取 https://composer.github.io/installer.sig,但校验步骤不能省——损坏的 composer-setup.php 会导致生成的 composer.phar 无法执行,且无明确错误提示。
正确做法是:在有网环境提前获取并保存签名值:
curl -sS https://composer.github.io/installer.sig
该输出是一行 96 字符的 SHA384 哈希值(如 55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae6),拷贝到断网机房后,在执行校验时直接代入:
php -r "if (hash_file('sha384', 'composer-setup.php') === '55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae6') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); }"
注意:不同 Composer 版本对应不同签名,升级前需重新获取。
全局镜像配置必须在联网环境完成,断网后无法动态切换
断网机房里 composer config -g repo.packagist composer https://packagist.phpcomposer.com 这类命令无效,因为镜像地址本身需要网络访问。真正起作用的是:提前把完整依赖包(.zip 或 .tar.gz)和 composer.lock 文件带入,再用 composer install --no-interaction --prefer-dist 离线还原。
关键点:
- 所有依赖必须已通过
composer require xxx在联网环境跑通,并生成稳定composer.lock -
vendor/目录可整体打包带走,但更轻量的做法是只带composer.lock+ 私有仓库的离线包缓存(如 Nexus 代理缓存导出) - 执行
composer install前确认composer.json中无"minimum-stability": "dev",否则可能因找不到 dev 分支而失败
最容易被忽略的是:断网时 composer update 彻底不可用,install 是唯一可行路径,且依赖版本完全由 lock 文件锁定——别指望临时改 composer.json 升级某个包。











