platform-check 是 composer 2.2+ 内置命令,用于校验当前 php 环境是否满足 composer.json 中声明的 php 版本及扩展存在性;它不自动触发、不检查扩展版本或配置启用状态,仅运行时调用 extension_loaded() 判断。

platform-check 是什么,它不解决什么
platform-check 是 Composer 2.2+ 内置的一个命令,用来在当前 PHP 环境下验证 composer.json 中声明的 platform 和 require 是否满足——比如你写了 "php": "^8.1",但实际运行在 PHP 7.4 上,它就会报错。
但它**不是**安装时自动触发的检查,也不影响 composer install 的默认行为;它也不会检查扩展是否已启用(比如 ext-mbstring 被禁用但 ini 文件里没注释掉),只看 extension_loaded() 的运行时结果。
常见错误现象:composer install 成功了,但项目一跑就报 Class not found 或 Function not found ——这时候回过头跑 composer platform-check,往往能立刻暴露 PHP 版本或扩展缺失问题。
怎么手动触发 platform-check 并让它真正起作用
直接运行 composer platform-check 即可。它会读取 composer.json 的 config.platform(如果存在)和 require 中的 php、ext-*、lib-* 声明,然后逐项校验。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 如果只校验 PHP 版本,确保
composer.json里有类似"php": ">=8.1.0 的约束,而不是笼统写 <code>"^8.1"(后者在旧版 Composer 解析可能不严谨) - 检查扩展必须写全名:用
"ext-mbstring": "*",不能写"mbstring": "*",否则会被忽略 - 若项目依赖
lib-iconv,需明确写"lib-iconv": "*";仅靠ext-iconv不代表系统级 lib 可用 - CI/CD 中建议在
composer install前加一行composer platform-check --no-dev(排除 dev 依赖干扰)
为什么有时 platform-check 没报错,但 runtime 还是失败
因为 platform-check 只做静态环境探测,不模拟加载过程。典型坑点:
-
ext-redis已启用,但redis.session.locking_enabled这类 INI 配置缺失 →platform-check不管 ini 设置 -
ext-gd存在,但没编译 PNG 支持 → 扩展存在,功能残缺,platform-check无法识别 - 使用 Docker 时,
composer platform-check在构建阶段运行,而实际运行容器 PHP 版本不同 → 必须在目标运行环境里执行 -
config.platform覆盖了真实环境(如设成"php": "8.0"),导致platform-check总是“通过”,掩盖真实不兼容
替代方案:用 require-runtime + 自定义脚本兜底
如果你需要更细粒度控制(比如检查某个函数是否存在、某个常量是否定义),platform-check 就不够用了。这时可以:
- 在
composer.json的autoload.files中注册一个启动检查文件,里面用function_exists()或extension_loaded()做运行时断言 - 把关键检查逻辑写进
scripts,例如:"post-autoload-dump": "php -r \"if (!extension_loaded('opcache')) die('opcache required');\"" - 避免在
require里滥用lib-*:比如"lib-pcre": ">=10.30"看似合理,但 PHP 不暴露 PCRE 版本号,这个检查永远跳过
最常被忽略的是:platform-check 不校验扩展的版本号(如 ext-mongodb: "^1.13"),只认存在性。真要控扩展版本,得靠运行时判断或文档约定。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










