Composer install失败的首要原因是PHP版本不匹配:先用composer --version检查其提示的PHP版本警告,再确认系统默认php命令指向正确版本;其次检查composer.json中config.platform.php是否强制锁定低版本,与本地PHP主版本不一致会导致依赖解析失败。

composer 命令本身不报错,但 install 失败:先看 composer --version 输出里的 PHP 版本提示
Composer 二进制文件会主动检查当前 PHP 版本是否满足自身运行要求。执行 composer --version 时,如果 PHP 版本太低,它会在版本号后面直接追加一行警告,比如:PHP Warning: Composer requires PHP >= 7.2.5 but you are running 7.0.33。
这不是你项目 composer.json 的约束,而是 Composer 自身的“启动门槛”。很多用户卡在这一步却没注意这行小字。
- 必须用系统默认
php命令能调到的 PHP 版本去跑composer,不是你 web server 用的版本 - Mac 用户装了 Homebrew PHP、MAMP、XAMPP 等多套环境,容易误用
/usr/bin/php(通常是系统自带旧版) - Linux 上可通过
which php和php -v对比确认 composer 实际调用的是哪个
项目 require 不通过:重点查 composer.json 里 config.platform.php 和 require.php
即使本地 PHP 是 8.2,composer install 仍可能报 Your requirements could not be resolved——大概率是项目强制锁定了平台版本。Composer 会优先信任 config.platform.php 的声明,而非真实环境。
-
"config": { "platform": { "php": "7.4.33" } }:告诉 Composer “假装”当前 PHP 是 7.4.33,所有包都按这个版本解析依赖 -
"require": { "php": "^8.1" }:这是对运行环境的真实要求,但只有在没有platform.php时才生效 - 删掉
config.platform.php是最快验证方式;若保留,必须确保它和你本地 PHP 主版本一致(如 8.1.x、8.2.x)
CI/CD 或 Docker 构建失败:别只信 FROM php:8.2-cli,还要看 composer --ignore-platform-reqs 的副作用
有些构建流程为绕过版本检查加了 --ignore-platform-reqs,结果 install 成功,runtime 却抛 Fatal error: Uncaught Error: Call to undefined function mb_strlen()——因为扩展没装,而 Composer 被强行忽略了。
-
--ignore-platform-reqs会跳过 PHP 版本 + 扩展(如ext-mbstring)+ ini 设置(如memory_limit)三类检查 - Docker 中常见漏配:PHP 镜像默认不启
ext-opcache或ext-pdo_mysql,但项目composer.json里写了"ext-opcache": "*" - CI 脚本里应显式验证:运行
php -m | grep mbstring和php -r "echo PHP_VERSION;",再跑 composer
想快速确认整套环境是否达标:用 composer diagnose,但得懂它每行在验什么
composer diagnose 不是“全绿就安全”,它分三层校验:基础命令可用性、网络连通性、本地配置合理性。最常被忽略的是第三类。
立即学习“PHP免费学习笔记(深入)”;
-
Checking platform settings: OK→ 实际在跑php -v+ 检查关键扩展是否 loaded(json,phar,zlib等) -
Checking git settings: OK→ 验证git config --global user.email是否设置,否则某些包从 VCS 安装会卡住 -
Checking http connectivity to packagist: OK→ 仅测 DNS + TCP 连通,不保证 HTTPS 证书或代理配置正确
真正关键的兼容性问题,往往藏在 diagnose 不覆盖的地方:比如 opcache.enable_cli=1 没开导致某些包加载异常,或者 memory_limit=-1 被设成 128M 导致大项目 dump-autoload 失败。











