不会自动检查,除非composer.json的require或config.platform中显式声明"ext-bcmath": "*";该命令仅校验配置中明确写出的平台依赖,不扫描php已加载扩展全量列表。

check-platform-reqs 会自动检查 bcmath 吗?
不会自动检查,除非 composer.json 的 require 或 config.platform 里**显式声明了 "ext-bcmath": "*"(或类似版本约束)**。这个命令只校验你“写进配置里的”平台依赖,不是扫描 PHP 全量已加载扩展。比如 ramsey/uuid 在底层可选使用 ext-bcmath 加速,但它通常不强制 require,所以 check-platform-reqs 默认看不到它。
怎么让 check-platform-reqs 强制校验 bcmath、gmp、uuid 等可选扩展?
往 composer.json 的 require 或 config.platform 里加一行声明即可,例如:
"require": {
"php": "^8.2",
"ext-bcmath": "*",
"ext-gmp": "*",
"ext-uuid": "*"
}
或者放在 config.platform 下(用于构建时模拟环境):
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
"config": {
"platform": {
"php": "8.2.10",
"ext-bcmath": "*",
"ext-gmp": "*"
}
}
-
require中声明 → 表示“运行时必须有”,check-platform-reqs会严格校验是否加载 -
config.platform中声明 → 表示“打包时假装有”,校验的是你本地是否匹配这个“假装值”,不是真实环境 - 大小写敏感:
ext-Bcmath或bcmath都无效,必须是小写ext-bcmath - Windows 用户注意:PECL
ext-uuid默认不提供 Windows 二进制包,即使声明了也大概率报 MISSING
为什么加了 ext-bcmath 却还提示 missing?
常见原因不是没装,而是没启用或 CLI 环境没读到配置:
- 运行
php -m | grep bcmath,如果无输出,说明 CLI SAPI 没加载该扩展 - 确认
php --ini输出的Loaded Configuration File路径,打开对应php.ini,检查是否有extension=bcmath且未被注释 - Docker 或 WSL 用户容易混淆宿主机和容器内 PHP —— 必须在目标运行环境里执行
check-platform-reqs -
ext-bcmath在 PHP 8.2+ 是默认启用模块,但某些精简版发行版(如 Alpine 的php-cli包)会剥离它,需额外安装php82-bcmath类似包
跳过某个扩展检查但保留其他校验
用 --ignore-platform-req=ext-bcmath 可临时绕过,不影响 PHP 版本或其他扩展检查:
- 参数值必须严格匹配声明名:
ext-bcmath,不能是bcmath或ext-Bcmath - 要跳过多个,重复写参数:
--ignore-platform-req=ext-bcmath --ignore-platform-req=ext-gmp -
--ignore-platform-reqs(带 s)是全局开关,会一并跳过 PHP 版本检查,慎用 - CI 流程中建议只对真正可选的扩展忽略,避免掩盖真实兼容性问题
check-platform-reqs 不关心代码里是否真调用了 bcmath 函数,只看你有没有声明它为依赖**。所以即便你加了 "ext-bcmath": "*",只要没在业务逻辑里用到,它也只是“多一道保险”;但一旦某次更新依赖悄悄引入了对它的调用,而你又没启用该扩展,就会在 runtime 突然报 Call to undefined function bcadd() —— 这时候,提前声明 + 校验才是真正起作用的防线。










