check-platform-reqs 仅检查当前 PHP 环境(PHP 版本、已加载扩展如 ext-zip/ext-xml、ICU/lib-iconv 等)是否满足 composer.json 中 config.platform 或 require 声明的平台约束,不查网络与依赖树。

check-platform-reqs 会检查哪些东西
composer check-platform-reqs 不查网络、不读依赖树,只做一件事:比对当前 PHP 运行环境(phpversion()、get_loaded_extensions()、extension_loaded()、INTL_ICU_VERSION 等)和 composer.json 里 config.platform 或根级 require 中声明的 platform 约束。
典型触发项包括:php 版本、ext-mbstring、ext-xml、ext-zip、ext-pdo、ext-gd、ext-curl、lib-iconv、lib-icu。它不会检查扩展是否启用正确(比如 pdo_mysql 是否可用),只看是否加载。
为什么 check-platform-reqs 显示缺失,但 php -m 里有?
常见原因不是“没装”,而是“没在当前 CLI SAPI 加载”。PHP 的 CLI 和 Web(如 Apache/FPM)使用不同配置文件(php.ini),扩展可能只启在 FPM 里。
- 运行
php --ini查看 CLI 实际加载的php.ini路径 - 用
php -m | grep -i zip确认 CLI 下是否真有zip - 如果
php -m没结果,但phpinfo()页面里有,说明 CLI 没启用该扩展——去对应php.ini补extension=zip.so(Linux)或extension=php_zip.dll(Windows) - 某些 Alpine 容器镜像默认不带
ext-zip,即使apk add php83-zip装了,也得手动写入php.ini
--no-dev 和 --ignore-platform-reqs 对 check-platform-reqs 的影响
check-platform-reqs 默认检查全部 platform 约束,不管是不是 dev 依赖。加 --no-dev 不会跳过检查,它只影响 install 阶段是否装 dev 包。
真正能绕过检查的是 --ignore-platform-reqs 或 --ignore-platform-req=ext-name,但注意:
-
check-platform-reqs --ignore-platform-reqs是非法命令——这个参数只被install、update、create-project接受,check-platform-reqs不支持 - 想临时忽略某项再验证?改
composer.json的config.platform,比如设"php": "8.2.0",再跑check-platform-reqs - CI 场景下建议先
check-platform-reqs,失败再决定是否加--ignore-platform-req=...到 install 步骤,而不是盲目全局忽略
如何让 check-platform-reqs 输出更准的版本号
默认输出只显示 “ext-zip: missing” 或 “ext-xml: 8.3.12”,但有些包要求精确到 ICU 版本或 lib-* 库,这时需确认环境真实值:
- ICU 版本:运行
php -r "echo INTL_ICU_VERSION;" - lib-iconv 版本:
php -r "echo ICONV_VERSION;"(部分系统不可用,可改用iconv --version) - lib-libxml:
php -r "echo LIBXML_DOTTED_VERSION;" - 若
check-platform-reqs报lib-icu >= 72.1不满足,而你运行php -r "echo INTL_ICU_VERSION;"得到71.1,就得升级 ICU 或降级依赖包
平台约束不是装饰,是运行时安全线。check-platform-reqs 的输出哪怕只有一行 warning,也可能导致后续 php artisan 或 symfony console 启动即 Fatal error——别跳过,要读懂它报的是哪一层缺位。











