报 platform requirements mismatch 需先确认真实 php 版本和扩展(如 php -v、php -m | grep gd),再精准使用 --ignore-platform-req=php 或 --ignore-platform-req=ext-gd;若为 lock 文件不兼容,则必须删除 composer.lock 后重装。

composer install 报 platform requirements mismatch 怎么办
这是本地 PHP 版本或扩展(如 ext-gd、ext-mbstring)不满足 composer.json 或依赖包声明的平台约束导致的。错误里通常会明确写出缺哪个 ext-xxx 或 PHP 版本不匹配。
- 先运行
php -v和php -m | grep gd(把gd换成报错里的扩展名),确认真实环境 - 不要一上来就加
--ignore-platform-reqs;优先尝试composer config platform.php 8.1.0(设成目标线上版本),再删掉vendor和composer.lock,重跑composer install - 如果只是开发环境临时缺某个非核心扩展(比如
ext-redis,而你当前不跑缓存逻辑),才考虑局部忽略
只忽略特定扩展或 PHP 版本,而不是全部
--ignore-platform-reqs 是全局开关,容易掩盖真正问题。更安全的做法是精准放行:
- 只跳过 PHP 版本检查:
composer install --ignore-platform-req=php - 只跳过某个扩展:
composer install --ignore-platform-req=ext-zip - 同时跳过多项:
composer install --ignore-platform-req=php --ignore-platform-req=ext-gd - 注意拼写必须和
php -m输出一致,比如是ext-curl,不是curl或php-curl -
--ignore-platform-reqs(带s)才是正确参数名,--ignore-platform-req会报错 unrecognized option
composer install 报 Your lock file does not contain a compatible set of packages 怎么办
这跟平台要求无关,是 composer.json 的 require 规则变了,但旧 composer.lock 还锁着老版本,Composer 拒绝“睁眼装”。
-
--ignore-platform-reqs在这里完全无效 - 最干净做法:删掉
composer.lock,再执行composer install—— 它会按新composer.json全量重解依赖树 - 想保留当前已安装的包版本?用
composer update --lock,它只更新 lock 文件结构,不改任何包版本 - CI/CD 中必须确保
composer.lock已提交且未被.gitignore,否则每次构建都可能装出不同结果
为什么 vendor/bin/xxx 执行时报错,跟 ignore-platform-reqs 有关
有些命令行工具(如 phpunit、larastan)自身在 require 里写了 "php": "^8.1"。即使你靠 --ignore-platform-reqs 装上了,它们启动时仍会自己校验 PHP 版本并拒绝运行。
- 这不是 Composer 安装阶段的问题,而是这些工具自身的运行时检查
-
--ignore-platform-reqs对它没用,得看工具是否提供跳过方式(比如phpunit --no-configuration),或降级工具版本 - 更隐蔽的风险是:opcache 缓存了类加载路径,错误可能延迟暴露,等接口调用才崩
真正容易被忽略的点是:即使你在 composer.json 里配了 "platform": {"php": "8.3.0"},如果 Composer 版本太老(如 2.2.x),它可能无法正确生成 vendor/autoload.php 映射,导致 Class not found。











