composer check-platform-reqs 总报错是因为它严格依赖 $path 中首个 php 二进制(如 /usr/bin/php),而非用户主观认为的 homebrew/xampp/编译版 php;需用 which php 确认实际路径,并统一 php -m 与 composer 调用的 php 实例及对应 php.ini。

为什么 composer check-platform-reqs 在非标准 PHP 路径下总报错?
它不是“报错”,而是校验了你 shell 当前调用的 PHP,而非你以为的那个。Composer 不会自动找你 Homebrew、XAMPP 或手动编译的 PHP;它只认 php 命令在 $PATH 中的第一个匹配项。你在终端敲 php -v 看到的是 8.2,但 composer check-platform-reqs 实际调用的可能是 /usr/bin/php(系统自带 7.4),这就导致版本/扩展全对不上。
怎么确认 Composer 到底用了哪个 PHP?
别猜,直接查:
- 运行
which php—— 这是 Composer 默认调用的路径 - 运行
composer config --global bin-dir—— 看 Composer 自身是否被安装在某个 PHP 环境下(比如通过curl -sS https://getcomposer.org/installer | /opt/homebrew/bin/php) - 用完整路径复现:比如
/opt/homebrew/bin/php -m | grep zip或C:\php\php.exe -r "var_dump(extension_loaded('mbstring'));" - 检查该 PHP 对应的配置文件:
/opt/homebrew/bin/php -i | grep "Loaded Configuration File"
check-platform-reqs 报 ext-zip: * (missing) 但 php -m 有 zip 怎么办?
根本不是扩展没装,是 CLI 和你检查时用的不是同一个 php 二进制。常见场景:
- macOS Homebrew 用户:终端默认用
/usr/bin/php(旧版),而你通过brew install php装的在/opt/homebrew/bin/php,但没加进$PATH前置 - Windows 多环境用户:Composer 可能调用
C:\php\php.exe,而你命令行执行的是C:\xampp\php\php.exe,两者php.ini完全不同 - Docker 或 WSL 用户:宿主机和容器内
php完全隔离,check-platform-reqs在哪跑就在哪查
解决办法:统一路径。要么改 $PATH,要么在项目根目录下用绝对路径启动 Composer:/opt/homebrew/bin/php composer.phar check-platform-reqs。
如何让 check-platform-reqs 检查指定 PHP 而非默认?
它本身不支持传入 PHP 路径参数,但你可以绕过:
- 临时切换环境:
PATH="/opt/homebrew/bin:$PATH" composer check-platform-reqs - 用
php显式调用:/opt/homebrew/bin/php composer.phar check-platform-reqs(确保composer.phar在当前目录) - 删掉
composer.json里的"config": {"platform": {...}}段——避免模拟层干扰,让它真正比对你刚指定的这个 PHP - CI 中建议固定 PHP 路径:
export PATH="/usr/local/bin:$PATH"+php -v && composer check-platform-reqs
最易被忽略的一点:即使你改了 $PATH,某些 IDE 或 GUI 终端(如 VS Code 集成终端)可能仍继承旧环境变量,得重启终端或手动 source ~/.zshrc。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











