这不是 composer 坏了,而是它在告诉你——当前 php 7.4 环境缺扩展、版本不匹配,或项目锁定了更高要求,必须显式对齐才能安全装依赖;check-platform-reqs 通过比对 php -v/php -m 与 composer.json 中的 php 版本、ext-* 扩展及 config.platform 配置来校验平台兼容性,缺一即报错。

直接结论:这不是 Composer 坏了,而是它在告诉你——当前 PHP 7.4 环境缺扩展、版本不匹配,或项目锁定了更高要求,必须显式对齐才能安全装依赖。
为什么 check-platform-reqs 会报错
运行 composer check-platform-reqs 本质是让 Composer 拿你当前 CLI 环境(php -v 和 php -m)去比对 composer.json 中声明的平台约束。它查三类东西:
- PHP 主版本和小版本是否满足
"php": "^7.4"或"^8.0"这类要求(注意:7.4.33 ≠ 7.4.0,但语义化版本通常兼容) - 必需扩展是否已加载,比如
ext-mbstring、ext-openssl、ext-pdo_mysql—— 缺一个就失败 - 是否存在
config.platform配置,且该配置与真实环境冲突(例如配置了"php": "8.1.0",但实际是 7.4)
常见报错形如:Your requirements could not be resolved to an installable set of packages 或明确列出 The requested PHP extension ext-gd is missing。
快速定位缺什么:用两行命令看全貌
别猜,直接执行:
php -v
php -m | grep -E "(mbstring|openssl|curl|json|pdo|gd|iconv|xml)"
对比 composer.json 的 require 和 config.platform 字段。重点看:
-
"php": ">=7.4.0"—— 你本地是 7.4.33?没问题;但如果是 7.3.29 就过不了 -
"ext-mbstring": "*"——php -m输出里没mbstring就得装 -
"config": { "platform": { "php": "8.1.0" } }—— 这个配置会让check-platform-reqs强制按 PHP 8.1 校验,哪怕你跑的是 7.4
修复方式选哪个,取决于你控制环境的能力
分三种情况处理:
-
你能改服务器环境(推荐):装缺失扩展。例如 Ubuntu 上缺
mbstring,就sudo apt install php7.4-mbstring && sudo systemctl restart php7.4-fpm;宝塔用户在面板里勾选扩展即可 -
你不能升级/装扩展,但确认代码实际兼容:临时跳过校验,加
--ignore-platform-req=ext-mbstring(只跳一个)或--ignore-platform-req=php(只跳 PHP 版本)。不要用--ignore-platform-reqs(复数),它会关掉全部检查,后续运行时大概率崩 -
项目本身锁死了高版本,但你坚持用 PHP 7.4:降级依赖包。例如 Laravel 10 要求 PHP 8.1+,那就换
"laravel/framework": "^8.75",删掉vendor/和composer.lock再重装
最容易被忽略的点
check-platform-reqs 检查的是 CLI 的 PHP,不是 Web SAPI。你在浏览器里 phpinfo() 看到有 gd 扩展,不代表 php -m 也有——很多服务器 CLI 和 FPM 是分开编译的。务必用 php -m 验证。另外,某些扩展(如 ext-sodium)在 PHP 7.4 是可选编译项,即使装了 php7.4 包也不一定自带,得单独确认。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











