答案是未正确配置config.platform或旧composer.lock未清除。需在composer.json根级config下声明"platform": {"php": "8.1.10"},删掉旧composer.lock和vendor/后重装,CI中推荐用--platform=php:8.1.10参数确保一致。

本地 composer install 装出来的包,线上跑不起来?八成是 PHP 版本或扩展的平台约束没对齐。这不是“环境不同”的模糊归因,而是 composer.json 里缺了明确的 config.platform 声明,或者声明了但被旧锁文件、缓存或错误路径覆盖了。
platform 配置写在哪?常见拼错位置
必须写在 composer.json 根级 config 对象下,键名就是 platform,不是 platform.php,也不是 php-platform 或嵌套在 extra 里。
-
"config": { "platform": { "php": "8.1.10" } }✅ 正确 -
"config": { "platform.php": "8.1.10" }❌ 键名错,Composer 忽略 -
"extra": { "platform": { "php": "8.1.10" } }❌ 层级错,不生效 -
"config": { "platform": "8.1.10" }❌ 值必须是对象,字符串被跳过
写完别急着 composer install——旧 composer.lock 会继续按原来平台解析,必须先删掉它和 vendor/,再运行 composer install 或 composer update --lock。
为什么 vendor 里还是装了 PHP 8.2 专属的包?
platform 只影响 composer install 和 composer update 时的依赖解析逻辑,它不会重写包内代码,也不会阻止你装一个本身只兼容 8.2 的包——只要那个包的 require 声明允许(比如 "php": "^8.2"),而你的 platform.php 又设成了 "8.2.5",它就会被选中。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 检查你依赖的包是否真声明了宽松的 PHP 约束(
composer show vendor/pkg | grep php) - 确认
platform值是具体小版本(如"8.1.10"),而非"^8.1"或"8.1"(后者会被忽略) - 执行
composer show php看当前解析用的平台 PHP 版本——它显示的是platform.php值,不是系统php -v
CI 构建中 platform 怎么用才稳?
CI 环境不可信,不能依赖它预装的 PHP 版本或全局 composer.json。推荐用命令行参数临时指定,每次构建都显式覆盖:
-
composer install --no-interaction --platform=php:8.1.10(Composer 2.2+ 支持) - 避免
--ignore-platform-req=php,它跳过校验却不保证兼容性,上线后 runtime 报错更难排查 - 如果 CI 用 Docker,Dockerfile 中应固定 PHP 和 Composer 版本:
RUN composer self-update 2.5.8 && composer install --no-interaction --platform=php:8.1.10
--platform 不写入 composer.lock,所以每次都要带;但它比改项目 composer.json 更适合 CI 场景——不污染源码,也不要求所有开发者同步更新配置。
扩展(ext-*)能靠 platform “假装存在”吗?
可以填,但非常危险:比如加 "ext-gd": "8.1.10",Composer 就不再检查 GD 是否真实启用,但线上若真没开 GD,运行时仍会 Fatal error: Uncaught Error: Call to undefined function imagecreatefromstring()。
- 扩展名必须带
ext-前缀(ext-mbstring,不是mbstring) - 值填
*容易让某些包误判为“已满足”,反而绕过本该触发的兼容性降级逻辑 - 真正该做的是:在 CI 和部署脚本里加
php -m | grep gd类似的检查,而不是靠platform掩耳盗铃
最常被忽略的一点:platform 不解决运行时问题,只解决安装时依赖决策。它再严格,也救不了没配好 php.ini 的服务器。

















