platform_check.php 由 composer 在生成 autoload 文件时自动创建,不默认执行,需手动 require 才在每次请求中校验 php 版本、扩展等运行时环境,失败则抛出 runtimeexception。

Composer 会严格检查 PHP 版本、扩展、架构等平台要求,但默认行为只在 install 和 update 时静态校验,不自动运行时拦截——除非你启用了运行时平台检查。
platform_check.php 是怎么被触发的
Composer 在生成自动加载文件(vendor/autoload.php)时,会顺带写入一个 vendor/platform_check.php 文件。它不会自动执行,只有当你显式 require 它,或项目框架/启动脚本主动包含它时,才会在每次请求中校验当前 PHP 环境。
- 该文件内容由
src/Composer/Platform/Runtime.php生成,检查项包括:PHP_VERSION、必需扩展(如ext-json)、PHP_INT_SIZE === 8(64 位)、extension_loaded()等 - 若校验失败,抛出
Fatal error: Uncaught RuntimeException: Your platform does not meet the requirements... - 这个机制不是默认启用的——Laravel、Symfony 等主流框架也**不自动引入**它,需手动集成
composer.json 里的 platform 配置到底影响谁
config.platform 是开发阶段的“环境模拟开关”,只作用于依赖解析过程,不影响运行时。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 例如:
"platform": {"php": "7.4.33", "ext-gd": "8.1.0"}→ Composer 会假装当前环境是 PHP 7.4,即使你实际在 PHP 8.2 下运行composer update - 它让
composer install能在高版本 PHP 上产出兼容低版本的composer.lock,适合构建多环境部署包 - 但它不会阻止你在 PHP 8.2 中加载一个只声明支持
php: ^7.4的包——只要composer.lock里锁定了兼容版本,运行时照常工作
为什么 check-platform-reqs 命令经常“没报错却跑不起来”
composer check-platform-reqs 只校验 composer.json 中 require 和 config.platform 声明的约束,不检查实际已安装包的运行时依赖。
- 典型漏检场景:某包在
composer.json里没写ext-redis,但代码里直接调用new Redis()→check-platform-reqs不报错,运行时才Class 'Redis' not found - 另一个盲区:它不验证扩展的**功能子集**。比如
ext-curl已启用,但服务器禁用了curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false)→ 平台检查通过,实际 HTTPS 请求仍失败 - 建议搭配使用:
composer show --platform查看当前环境真实识别到的平台信息,再人工比对业务所需扩展
忽略平台要求的三种方式及风险差异
它们生效时机和粒度完全不同,混用容易误判环境兼容性。
-
--ignore-platform-reqs:跳过所有平台检查(PHP 版本 + 扩展 + 架构),composer install会强行安装,但运行时可能因缺少扩展直接崩溃 -
--ignore-platform-req=php:仅跳过 PHP 版本检查,扩展和架构仍校验;适合临时测试新 PHP 版本兼容性 -
--ignore-platform-req=ext-xml:精确跳过单个扩展,适用于 CI 中 mock 扩展行为,但要注意该扩展是否被依赖链中的某包硬依赖(如symfony/console启动时就检查ext-dom)
真正容易被忽略的是:这些参数**不影响 platform_check.php 的运行时校验逻辑**。即使你用 --ignore-platform-reqs 装完了包,只要启动脚本里 require vendor/platform_check.php,它依然会按原始 composer.json 要求做检查。










