require.php 是最有效的PHP版本强制升级手段,它在composer install/update时立即校验真实PHP版本,报错明确且不可绕过,而config.platform.php仅模拟环境、易被覆盖;正确写法为"php": ">=8.1.0"并置于require块内。

直接写 require.php 是最有效的方式——它不靠人提醒、不依赖文档,只要版本不达标,composer install 就会中断并报错,倒逼环境升级。
为什么 require.php 比 config.platform.php 更适合推动升级
require.php 是硬性门槛,不是“建议”;config.platform.php 是模拟环境,只影响依赖选择。想用低版本 PHP 强行装包?require.php 会拦在第一步。
-
require.php触发时机早:运行composer install或composer update时立即校验当前php -v输出 - 报错明确:
Your requirements could not be resolved...后紧跟PHP version required: >=8.1.0 - 它不接受妥协:加
--ignore-platform-reqs会被忽略,除非显式指定--ignore-platform-req=php -
config.platform.php在同一项目里可能被 CI 脚本覆盖(比如composer config platform.php 8.0),反而削弱约束力
require.php 的写法必须精确,否则形同虚设
写错格式等于没写。Composer 对字段值敏感,常见无效写法包括 "php": "8.1"、"php": "^8.1"、"php": "8.1.*" —— 这些都会被解析为模糊语义,甚至跳过校验。
- 推荐写法:
"php": ">=8.1.0"(显式、无歧义、兼容所有 Composer 版本) - 避免
^8.1:虽然语义等价,但某些旧版 Composer 解析不稳定 - 不要省略补丁号:写
">=8.1.0"而非">=8.1",防止 minor 升级策略变化导致意外行为 - 该字段必须放在
require块内,不能放在config或顶层
升级失败时,先确认是不是 runtime 真的不兼容
有时候 composer install 成功了,但项目一跑就 Fatal error: Uncaught Error: Call to undefined function str_contains()。这说明 require.php 没拦住,因为某个依赖包没声明自己的 php 要求,或者你用了 --ignore-platform-req=php。
立即学习“PHP免费学习笔记(深入)”;
- 执行
composer show --platform查看当前生效的平台版本(含 CLI 实际版本) - 运行
composer prohibits php找出哪个包在拉高版本依赖 - 检查
vendor/下关键包的composer.json,确认其require.php是否宽松到允许 7.4 - 特别注意 autoloader:PHP 8.1+ 生成的 autoload_static.php 可能在 8.0 下因 opcache 兼容逻辑报错,需
composer dump-autoload --optimize重生成
真正卡住升级的往往不是 require.php 写得不够狠,而是团队在 composer update 时没加 --with-all-dependencies,导致 composer.lock 里锁着一堆 PHP 7.x 兼容的老包。约束写得再准,lock 文件不更新,就永远迈不出第一步。



















