必须用官方脚本安装Composer而非apt,因apt版版本陈旧(2.2.x)、不支持现代框架、self-update失效且无PATH配置;需校验SHA384并确保zip/phar/mbstring等PHP扩展启用。

别用 apt install composer,它装的是个“假全局”——版本卡在 2.2.22 或更低,不支持 ^2.5 依赖约束,PHP 8.3 下直接报错,composer self-update 会失败或静默降级。
为什么 apt install composer 一定不能用
Ubuntu 官方源里的 php-composer 包不是官方维护的,更新严重滞后(截至 2026 年 4 月,LTS 系统仍普遍是 2.2.x),且存在三个硬伤:
- 安装路径是
/usr/share/php/composer/composer,该目录不可写,self-update永远卡住 - 不自动加入
$PATH,也不设执行权限,装完composer --version都可能报command not found - 缺少对现代框架关键机制的支持:Laravel 11+、Symfony 7+ 明确要求 Composer 2.5+ 的 autoload 优化和插件加载逻辑,旧版直接拒绝
install
检查是否中招:运行 composer --version,输出含 2.0.x 或 2.2.x 就基本可判定是 apt 版本。
必须校验 SHA384 后再安装 composer.phar
跳过校验看似省事,实则埋下严重信任隐患:中间人若劫持下载,后续所有依赖安装、autoload 生成都不可信。官网签名地址是 https://www.php.cn/link/50c8932f79e0369ac94e06e9c6bd86e5,不是镜像站给的哈希值。
直接复制执行以下命令(含校验):
EXPECTED_CHECKSUM="$(curl -sS https://www.php.cn/link/50c8932f79e0369ac94e06e9c6bd86e5)"
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
ACTUAL_CHECKSUM="$(php -r "echo hash_file('sha384', 'composer-setup.php');")"
if [ "$EXPECTED_CHECKSUM" != "$ACTUAL_CHECKSUM" ]; then
echo 'Integrity check failed' >&2; rm composer-setup.php; exit 1
fi
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
rm composer-setup.php
验证:composer --version 应输出类似 Composer version 2.7.7。
PHP 扩展缺失会导致 composer install 直接崩
composer --version 成功 ≠ 能用。真正干活时(解压包、生成 autoloader、校验签名)全靠扩展撑着。缺一不可:
-
zip:解压 vendor 包,缺了报Class 'ZipArchive' not found -
phar:构建和读取 PHAR 文件,缺了报PharData not found -
mbstring、xml、json、curl:解析composer.json、处理远程元数据、生成 autoload 类映射
确认是否启用:php -m | grep -E "zip|phar|mbstring|xml|json|curl"。若缺,按 PHP 主版本安装,例如 PHP 8.3 环境需 sudo apt install php8.3-zip php8.3-phar(先用 php -v 确认版本)。改完无需重启服务,但要确保 CLI 使用的配置一致:php --ini 查路径,确认 .ini 文件里没注释掉对应 extension= 行。
composer global require 的命令找不到?PATH 没配对
运行 composer global require laravel/installer 后,laravel 命令提示 command not found,不是 Composer 故障,是 shell 找不到全局 bin 目录。
- Composer 默认把全局二进制放
~/.composer/vendor/bin/,这个路径不在 Ubuntu 默认$PATH里 - 临时生效:
export PATH="$HOME/.composer/vendor/bin:$PATH" - 永久生效:把上行加到
~/.bashrc或~/.zshrc(看你在用哪个 shell) - 切记别加
sudo:否则装到/root/.composer/vendor/bin/,普通用户当然找不到
验证:echo $PATH 看是否含该路径;再运行 which laravel 应返回完整路径。
最常被忽略的其实是校验步骤和扩展完整性——很多人看到 composer --version 成功就以为万事大吉,结果第一次 install 就卡死或报错,回头排查却绕一大圈。


















