composer check-platform-reqs 是检测本地环境与 composer.json 中声明的平台依赖(如 PHP 版本、扩展)是否匹配的主动检查工具,不校验间接依赖,也不读取已安装包的依赖树,仅基于根 composer.json 的 require 和 config.platform 进行比对。

composer check-platform-reqs 不是用来“绕过”或“忽略”PHP版本/扩展限制的,它是帮你提前发现本地环境和 composer.json 中声明的平台依赖(比如 PHP 版本、ext-zip)是否匹配的「体检报告」。用错地方反而会掩盖真实问题。
为什么 check-platform-reqs 会显示 “missing” 却又不影响 install?
因为 composer install 默认不严格校验平台依赖(除非你加了 --ignore-platform-reqs 或配置了 platform-check),而 check-platform-reqs 是独立、主动的检查命令——它只读取 composer.json 的 config.platform 和 require 里的平台包(如 php, ext-curl),再比对当前运行环境。
- 如果你没配
config.platform,它就只检查require里显式写的平台包(例如"php": "^8.1") - 如果
require里根本没写php或扩展,那这条检查就“不生效”,哪怕项目实际运行时会崩 - 它不读
vendor/autoload.php或已安装包的依赖树,只看根composer.json
怎么让 check-platform-reqs 真正有用?
关键不是运行命令,而是先规范声明平台需求。否则检查结果只是“已知信息的重复输出”。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 在
composer.json的require里补全最低 PHP 版本:"php": ">=8.1.0"(别用^8.1,它会被解析为>=8.1.0 ,但 <code>check-platform-reqs对范围符支持有限,建议用 >=) - 显式声明必需扩展:
"ext-zip": "*"、"ext-pdo_mysql": "*"(*表示“只要装了就行”,不校验版本) - 如果项目要部署到不同环境(如 Docker + Alpine),可在
config.platform提前模拟目标环境:"platform": {"php": "8.2.10", "ext-gd": "8.2.10"},这样check-platform-reqs就按这个“虚拟平台”来比对
check-platform-reqs 报 “missing” 但 php -m | grep zip 显示存在?
常见于 CLI 和 Web SAPI 使用不同 php.ini,或扩展虽已编译但未启用。
- 确认当前 Composer 运行时的 PHP 路径:
which php,再查它的配置:php -i | grep "Loaded Configuration File" - 检查该 php.ini 是否启用了扩展:
php -m | grep zip和php -r "print extension_loaded('zip') ? 'yes' : 'no';" - Linux 下常见坑:系统自带 PHP(如 Ubuntu 的
php-zip包)和源码编译的 PHP 混用,CLI 和 Apache 模块加载的 .so 文件路径不同 - Windows 用户注意:
php.ini里extension=php_zip.dll前不能有分号,且 DLL 文件必须在extension_dir指向的目录下
真正容易被忽略的是:这个命令不会告诉你某个包“间接依赖”了什么扩展——比如你没 require ext-iconv,但所用的 symfony/console v6.4 在某些字符处理路径下会动态调用它。这时候 check-platform-reqs 完全沉默,直到运行时报 Call to undefined function iconv()。

















