应同时设置 require.php 和 config.platform.php:前者作为运行时版本闸门,后者控制依赖解析时的PHP版本兼容性,避免本地开发与生产环境因PHP版本差异导致部署失败。

Composer 不会自动检测你本地 PHP 版本是否满足项目要求,它只在 composer install 或 composer update 时检查 php 平台配置是否与当前运行环境匹配——也就是说,你必须手动在 composer.json 中声明,否则别人 clone 项目后可能装错依赖甚至跑不起来。
在 composer.json 的 config.platform.php 中硬编码 PHP 版本
这是最常用、也最可控的方式,尤其适合 CI/CD 或团队协作场景。它让 Composer 在解析依赖时“假装”当前环境是该版本,从而选到兼容的包版本(比如避免安装只支持 PHP 8.2 的 ramsey/uuid v5+)。
操作方式:
- 在
composer.json的config字段下添加platform配置(若无config则新建) -
platform.php的值必须是字符串,如"8.1.0"或"^8.1"(注意:这里不支持~8.1这类写法,Composer 会报错) - 这个设置只影响依赖解析,不影响实际运行时——你仍需确保部署环境真有对应 PHP 版本
{
"config": {
"platform": {
"php": "8.1.10"
}
}
}
用 require.php 声明最低运行时版本
这个字段告诉 Composer:“本项目代码至少需要 PHP X.Y 才能执行”,它影响的是 composer install 是否允许继续——如果当前 PHP 版本低于该值,会直接中断并报错 Your PHP version (X.Y.Z) does not satisfy that requirement.
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
立即学习“PHP免费学习笔记(深入)”;
常见误用点:
-
require.php是给运行环境设底线,不是给依赖解析用的;它和config.platform.php各司其职,可同时存在 - 值必须是约束表达式,如
">=8.1.0"、"^8.1",不能写成"8.1"(这会被当作精确版本,导致 PHP 8.1.10 不被接受) - 如果只写了
"^7.4"却在 PHP 8.0 下运行,不会报错——因为^7.4允许 8.0,但你本意可能是“仅限 7.4.x”
{
"require": {
"php": ">=8.1.0",
"monolog/monolog": "^2.8"
}
}
为什么两个 PHP 版本配置都要设?
因为它们解决的是不同阶段的问题:
-
require.php是“启动闸门”:PHP 版本不够,连composer install都不让你过 -
config.platform.php是“依赖过滤器”:确保即使你在 PHP 8.2 上开发,也能装出兼容 PHP 8.1 的依赖版本(比如避免ext-gmp被意外排除) - 漏掉前者,部署到低版本服务器时 runtime 报错才暴露问题;漏掉后者,本地装的包可能在目标环境因扩展缺失或语法不兼容而崩溃
真正容易被忽略的是:CI 流水线里常只校验 require.php,却忘了同步维护 config.platform.php——结果测试通过,上线后发现 symfony/console 装了 v6(要求 PHP 8.1+),而生产环境是 8.0.30,直接 Fatal error: Uncaught ParseError。


















