应卸载 apt 安装的旧版 Composer(2.2.22 及以下),改用官网校验安装;同时安装 php-zip、php-phar 等必要扩展,并配置 PATH 包含 ~/.composer/vendor/bin。

别用 apt install composer,它装的是个“假全局”
Ubuntu 官方源里的 php-composer 包版本卡在 2.2.22 或更低(2026 年已落后 5 个大版本),不支持 ^2.5 这类依赖约束,PHP 8.3 下直接报错,composer self-update 会失败或静默降级。更隐蔽的问题是:它实际指向 /usr/share/php/composer/composer,该路径不可写,升级永远卡住。
- 卸载旧包:
sudo apt remove php-composer,再删残留:sudo rm -f /usr/bin/composer /usr/local/bin/composer - 检查是否中招:
composer --version输出若含2.0.x或2.2.x,基本可判定是 apt 版本 - 系统源版不会自动把
/usr/local/bin加进 PATH,也不会设执行权限——这两点后续全得手动补
必须校验 SHA384 再安装,否则 PHAR 可能被篡改
跳过校验看似省事,实则埋下严重信任隐患:中间人若劫持下载,后续所有依赖安装、autoload 生成都不可信。官网签名地址是 https://composer.github.io/installer.sig,不是随便一个镜像站给的哈希值。
- 下载并校验(命令可直接复制):
EXPECTED_CHECKSUM="$(curl -sS https://composer.github.io/installer.sig)"<br>php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" <br>ACTUAL_CHECKSUM="$(php -r "echo hash_file('sha384', 'composer-setup.php');")"<br>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-zip 和 php-phar 缺失,composer --version 不报错但 install 必崩
很多人看到 composer --version 成功就以为装好了,结果一跑 composer install 就卡住或抛出 Class 'ZipArchive' not found、PharData not found。这是因为 Ubuntu 默认 PHP 安装只含最简模块,而解压依赖包、生成 autoloader 全靠这些扩展撑着。
- 必须装齐:
sudo apt install php-cli php-zip php-json php-phar php-xml unzip git - 确认启用:
php -m | grep -E "zip|phar|json|xml";若缺,例如 PHP 8.2 环境需装php8.2-zip(先用php -v确认主版本) - CLI 和 Web 使用的 PHP 配置可能不同,运行
php --ini查看加载的.ini路径,确保对应extension=行没被注释
composer global require 装的命令找不到?PATH 没配对,不是 Composer 的锅
composer global require laravel/installer 后,laravel 命令提示 command not found,99% 是因为 Composer 把二进制放到了 ~/.composer/vendor/bin/,而这个路径根本不在你的 $PATH 里。
- 临时生效:
export PATH="$HOME/.composer/vendor/bin:$PATH" - 永久生效:把上行加到
~/.bashrc(bash 用户)或~/.zshrc(zsh 用户),然后source ~/.bashrc - 切记别加
sudo:用sudo composer global require会装到/root/.composer/vendor/bin/,普通用户当然找不到 - 验证:
which laravel应返回完整路径,echo $PATH应含~/.composer/vendor/bin
--version 的输出。


















