答案是php未被系统识别,需先运行php --version验证;若失败则配置php路径至path,若成功但composer仍报错,需检查composer_php环境变量或php-binary配置是否覆盖了系统path。

composer install 时提示 “PHP is not recognized” 或 “command not found”
这说明 Composer 找不到 php.exe(Windows)或 php(Linux/macOS),不是 Composer 自身路径问题,而是它运行时依赖的 PHP 解释器未被系统识别。
Composer 启动后会调用系统 php 命令执行脚本(比如 composer.phar),所以它不关心你从哪装的 PHP,只认当前 shell 环境里 php 是否可用。
- 在终端运行
php --version—— 如果报错,说明 PHP 根本没进PATH,先解决这个 - 如果
php --version正常,但composer install仍失败,可能是 Composer 被配置成用特定 PHP 路径(比如通过COMPOSER_PHP环境变量或phpBinary配置) - 检查是否设置了
COMPOSER_PHP:运行echo $COMPOSER_PHP(Linux/macOS)或echo %COMPOSER_PHP%(Windows),若输出非空,Composer 就会强制用该路径启动 PHP,且不校验是否存在
怎么确认 Composer 当前用的是哪个 PHP
Composer 不会主动告诉你它调用了哪个 PHP,但你可以用调试方式“逼它露出来”:
- 临时把系统
php替换成一个 wrapper 脚本(Linux/macOS)或批处理(Windows),里面加echo "PHP called: $0"和exec "$@",再运行composer install -v - 更简单的方法:运行
composer diagnose,它会在输出末尾显示PHP binary path行 —— 这是 Composer 当前实际解析并使用的 PHP 可执行文件路径 - 注意:该路径可能和
which php不同,尤其当你设置了COMPOSER_PHP或在composer.json里配了"config": {"php-binary": "..."}
COMPOSER_PHP 和 php-binary 配置谁优先级更高
COMPOSER_PHP 环境变量拥有最高优先级,它会直接覆盖所有配置项,包括 php-binary 和 which php 的结果。
-
COMPOSER_PHP:进程级生效,只要设了就硬用,哪怕路径不存在(此时报错“PHP executable not found”) -
php-binary配置项:分作用域,composer config --global php-binary /path/to/php影响所有项目;composer config php-binary /path/to/php(无--global)只影响当前项目composer.json所在目录 - 没设以上两者时,Composer 才 fallback 到
PATH中第一个可执行的php - 验证方式:运行
composer diagnose | grep "PHP binary",输出值就是最终被采用的路径
为什么改了系统 PATH 或重装 PHP,composer install 还用旧版本 PHP
因为 COMPOSER_PHP 或项目级 php-binary 配置还在起作用,它们会屏蔽系统变更。
- 检查全局配置:
composer config --global --list | grep php-binary - 检查当前项目配置:
composer config --list | grep php-binary - 检查环境变量:
printenv | grep COMPOSER_PHP(Linux/macOS)或set | findstr COMPOSER_PHP(Windows) - 清除干扰项:
composer config --global --unset php-binary,再 unset 环境变量:unset COMPOSER_PHP(Linux/macOS)或set COMPOSER_PHP=(Windows CMD) - 之后再运行
composer diagnose,看PHP binary path是否已变成你期望的路径
COMPOSER_PHP —— 它静默接管一切,且不会提示“我正在覆盖你”。php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











