应使用 --ignore-platform-reqs 跳过平台校验,该参数强制忽略 php 版本、扩展及 ini 配置检查,适用于 ci、docker 等场景,但生产环境不推荐长期使用。

composer install 时卡在“Checking platform settings”怎么办
这是 Composer 7.x+ 默认行为:安装前强制校验 PHP 版本、扩展、INI 配置是否匹配 composer.json 中的 platform 声明。网络本身不参与这一步,但很多人误以为是“网络检查”,其实是本地环境校验失败或超时(比如某些扩展检测会触发外部命令或扫描慢路径)。
真正要绕过的不是“网络”,而是平台校验逻辑本身。最直接的办法是加 --ignore-platform-reqs:
composer install --ignore-platform-reqs
- 它跳过所有
php、ext-*、lib-*的版本比对,包括platform.config里写的opcache.enable这类 INI 设置 - 适用于 CI 构建、Docker 多阶段构建、或你明确知道当前环境“虽然不完全匹配但能跑通”的场景
- ⚠️ 不推荐在生产部署中长期使用 —— 比如跳过
ext-gd检查,运行时真缺这个扩展,报错会更晚、更难定位
为什么加了 --no-scripts 还是卡在 platform check
--no-scripts 只禁用 scripts 字段定义的钩子(如 post-install-cmd),和平台校验完全无关。校验发生在依赖解析之后、脚本执行之前,属于 Composer 自身安装流程的硬性前置步骤。
如果你发现加了 --no-scripts 仍卡住,说明问题不在脚本,而在平台校验本身 —— 很可能是某个扩展检测阻塞了,比如:
-
ext-igbinary在旧版 PHP 上尝试加载失败并 hang 住 - 自定义
platform-check脚本被第三方插件注入(少见,但存在) - PHP 配置中
disable_functions禁用了shell_exec或exec,导致 Composer 内部调用失败后无限重试
此时唯一有效解法仍是 --ignore-platform-reqs,或手动清理掉引发问题的 platform 声明项。
composer create-project 怎么跳过平台检查
和 install 一样,create-project 也默认做平台校验。它甚至更严格,因为还要处理模板包本身的依赖约束。
必须显式传参:
composer create-project laravel/laravel myapp --ignore-platform-reqs
- 不能只写
--no-interaction或--quiet,它们不影响校验逻辑 - 如果项目
composer.json里写了"config": {"platform": {"php": "8.3.0"}},而你本地是 8.2,不加该参数会直接报错退出,不会进到下载环节 - 某些私有仓库模板会把
platform设得非常死,这时候--ignore-platform-reqs是唯一能继续的路
绕过检查后 vendor/autoload.php 加载失败?
跳过平台检查 ≠ 绕过运行时依赖。常见坑是:你用 --ignore-platform-reqs 强行装了要求 ext-sodium 的包,但系统没装这个扩展 —— composer install 成功了,可一运行就报 Class 'SodiumException' not found。
这类问题不会在安装时报错,只能靠测试暴露。建议:
- CI 中至少跑一次
php -m | grep sodium类似的检查,而不是只信 Composer 输出 - 开发机上用
composer show --platform对照看哪些扩展实际缺失 - 容器部署时,别只 COPY vendor,记得确认基础镜像已装好对应扩展(例如
docker-php-ext-install sodium)
平台检查被跳过的地方,就是 runtime 报错开始的地方。这点容易被忽略,尤其当错误信息不指向扩展名而是某个类时。









