composer check-platform-reqs 不检测64位整型溢出等底层ABI约束,仅校验composer.json中显式声明的PHP版本、扩展存在性及INI设置值,不验证GMP精度、PHP_INT_SIZE、disable_functions屏蔽或SAPI差异。

composer check-platform-reqs 不检测 64 位整型溢出相关的系统约束。
它根本不检查整型精度或平台 ABI 位宽
该命令只校验 composer.json 中显式声明的三类东西:PHP 版本号(如 "php": ">=8.1")、扩展存在性(如 "ext-gmp": "*")、INI 设置值(如 "memory_limit": "256M")。它不探测底层 C 库、CPU 架构、glibc 版本,也不调用 PHP_INT_MAX 或 PHP_INT_SIZE 做运行时判断——哪怕你的项目在 ARM64 上因 int 截断出错,只要没在 require 里写 "lib-int64": ">=1.0"(这本身也无效),它就完全沉默。
为什么你看到的“64 位支持”提示其实是误导
有些项目会在 composer.json 里写 "ext-gmp": "*" 或 "ext-bcmath": "*",并声称“支持大整数”。但 check-platform-reqs 只确认扩展是否加载,不验证:
-
gmp_init('9223372036854775808')是否真能成功(即 PHP 是否编译为 64 位、GMP 库是否启用__int128) -
PHP_INT_SIZE === 8是否成立(Windows 下 CLI 和 Apache 的 PHP 可能不同) - 扩展是否被
disable_functions屏蔽(它不读disable_functions配置)
真正要查整型行为,得绕过 Composer
如果你怀疑目标环境有整型溢出风险(比如部署到 Alpine Linux musl + PHP 静态链接版),必须手动验证:
- 执行
php -r "var_dump(PHP_INT_SIZE, PHP_INT_MAX);"—— 确认是 8 和 9223372036854775807 - 测试关键函数:
php -r "var_dump(gmp_strval(gmp_add('9223372036854775807', '1')));" - 检查 SAPI 差异:CLI 下跑通 ≠ Web 下可用,务必用
php-fpm -i | grep 'PHP Version\|INT'对比
最容易被忽略的是:即使 check-platform-reqs 全绿,gmp_add() 在某些嵌入式 PHP 构建中仍会静默回退到 float,导致精度丢失——它不报,也不管。











