必须在require中写"php": "^8.1",否则composer安装时不校验php版本,上线后因语法不兼容才暴露问题;require.php是唯一触发安装拦截的配置,config.platform.php仅模拟环境影响依赖解析,二者需配合使用确保开发、ci与生产一致。

必须在 require 中写 "php": "^8.1",否则 Composer 安装时不会校验 PHP 版本,项目上线后遇到语法错误才暴露问题。
require.php 是唯一触发安装拦截的位置
Composer 只有在 require 字段里看到 "php" 条目,才会在 composer install 或 composer update 时比对当前 php -v 输出。不满足就直接中断,并报错类似:
Your requirements could not be resolved to an installable set of packages. The requested PHP version is >=8.1.0, but your system has 8.0.30.
- 写错位置:放在
config.platform、require-dev或config顶层,都不起作用 - 写法无效:
"php": "8.1"、"php": "8.1.*"、"php": "^8.1.0"(补零写法不被识别)都会被忽略 - 必须用语义化约束符:
"^8.1"(推荐)、">=8.1.0"或"~8.1.0",三者等价但^最通用
config.platform.php 不是版本闸门,只是依赖解析的“伪装开关”
它只影响 composer update 时选哪个包版本,比如你在 PHP 8.2 的机器上设 "config": {"platform": {"php": "8.0.30"}},Composer 就会跳过要求 php: ^8.1 的新包,改选兼容 8.0 的旧版。
详细的 Three.js 3D 图形参考,涵盖场景设置、相机、几何体、材质、光照、动画、控制器、加载器、数学工具和调试。
- 值必须是具体字符串版本号,如
"8.0.30"或"8.1";"^8.0"、">=8.0"这类写法会被直接忽略 - 它不阻止你用低版本 PHP 运行
composer install——只要锁文件存在,安装照样成功 - 常见翻车点:CI 脚本里只配了
platform却没写require.php,构建通过,部署后因readonly或match语法直接ParseError
composer.lock 存在时,require.php 校验可能被跳过
如果项目已有 composer.lock,且其中记录的依赖是在某个 PHP 版本下解析成功的,那么 composer install 默认不重新检查 require.php,而是直接按锁文件安装——哪怕你现在换到了 PHP 7.4。
- 验证是否真生效:在低于声明版本的环境中运行
composer install,看是否报错 - 强制重检:加
--ignore-platform-reqs是绕过,不是修复;正确做法是删掉composer.lock后重跑composer update - CI 中建议加一步:执行
php -v后再跑composer install,避免环境不一致导致锁文件误生成
require.php 和 config.platform.php 可以共存,但语义不能冲突
例如项目真实最低要求是 PHP 8.1,那 config.platform.php 就不能设成 "7.4"——这会让 Composer 选到只兼容 7.4 的旧包,但你的代码又用了 str_contains(),结果运行时报错。
- 推荐组合:
"require": {"php": "^8.1"}+"config": {"platform": {"php": "8.1.10"}} - 前者守住底线,后者控制依赖选择空间,两者配合才能让本地开发、CI 构建、生产部署三端一致
- 最容易被忽略的是:require.php 不改变运行时行为,它只管安装;真正防崩靠的是把
php -v检查和php -l vendor/autoload.php加进部署前流水线
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










