platform仅在composer安装/更新时模拟php环境以选择兼容依赖,不改变实际php版本、扩展或配置;正确写法为config.platform下对象,如{"php":"8.1.25"}。

platform 不是 PHP 版本管理器,它只骗 Composer 自己
你改了 config.platform.php,php -v 还是老样子,项目跑起来该报 Fatal error: Uncaught Error: Undefined constant "FILTER_VALIDATE_EMAIL" 还是会报——因为 platform 从不碰你的 PHP 二进制、不装扩展、不改 php.ini。它唯一作用是:在 composer install 或 composer update 那几十秒里,让 Composer 假装自己运行在你写的那个 PHP 版本下,从而选对依赖版本。
- 你本地是 PHP 7.4,但生产是 8.1?加
"php": "8.1.25",Composer 就不会去拉 require 了php: ^8.2的包 - 你本地没装
ext-sodium,但线上有?光写"ext-sodium": "*"不行,得确保线上真启用了,否则运行时报Class 'SodiumException' not found -
platform是纯解析期开关,跟engines(Node.js 那套)完全不是一回事,它不警告、不中断、不校验真实环境
正确写法:必须嵌在 config 下,且键名就是 platform
错一次就白忙半小时:很多人写成 "platform.php"、"php-platform"、或者把整个对象塞进 "require" 里,结果 Composer 完全无视——它只认 config.platform 这个精确路径。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 正确位置:
"config": { "platform": { "php": "8.1.25" } },和"require"同级 - 值必须是对象,不能是字符串:
"platform": "8.1.25"❌;"platform": { "php": "8.1.25" }✅ - 建议写具体小版本,比如
"8.1.25"而非"^8.1",避免因语义化版本解析偏差引入意外高版本依赖 - 如果项目用到
ext-mbstring、ext-openssl,也得一并声明,否则 Composer 可能选一个“宣称支持 8.1 但其实偷偷用了 8.2 新函数”的包
宝塔/多 PHP 环境下,platform 和真实 PHP 路径要分开管
你在宝塔后台把网站设成 PHP 8.2,终端里 php -v 却还是 7.4?那 composer install 用的仍是 7.4 的 php 命令——platform 再准也没用,扩展没加载、函数不存在,照样崩。
- 先确认真实执行路径:
which php,再查对应版本:/www/server/php/82/bin/php -v - 执行时显式指定:
/www/server/php/82/bin/php /usr/bin/composer install -
platform配置只影响依赖选择,而/www/server/php/82/bin/php -m | grep mbstring才决定mb_strlen()能不能用 - 宝塔里每个 PHP 版本的扩展要单独勾选启用,不是“装一次,全版本生效”
CI/CD 或容器构建时,别只靠 platform,配合 platform-check-file + platform-check: false
某些 CI 环境(比如 GitHub Actions 的自托管 runner)PHP 版本混乱、扩展不可控,composer install 直接卡在 ext-gd missing。这时 platform 还不够,得用 Composer 2.5+ 的 platform-check-file 快照机制。
- 必须同时设置:
"platform-check": false,否则 Composer 仍会先跑php -m检查,失败就退出,根本不会读你的快照文件 - 快照文件(如
.ci/platform.json)内容必须严格为:{"php": "8.1.22", "ext-curl": true, "ext-json": true},键名大小写敏感、ext-前缀不能少 - 路径只能是相对路径(相对于
composer.json),不支持~或环境变量 - 这招只适合构建阶段“我知道目标环境是什么,但宿主机太脏”,不能替代真实环境验证
ext-pdo_mysql,new PDO() 依然会 fatal。所以 platform 必须和部署检查脚本、php -m 校验、以及 require 中明确的 "php": "^8.1" 声明一起用,缺一不可。










