离线环境执行composer install时,因缺ext-redis等扩展会直接中止安装,需用composer config platform.ext-redis 0声明虚拟扩展或--ignore-platform-req=ext-redis跳过校验,但须确认业务代码不强依赖该扩展。

离线环境执行 composer install 时,如果目标机缺某个 ext-redis 或 ext-gd,Composer 默认会直接中止,不装包也不生成 autoload —— 它不是运行时报错,而是在解析阶段就卡死。这不是网络问题,是平台约束(platform)校验在作祟。
为什么 ext-xxx 检查在离线时特别致命
Composer 在安装前会读取 composer.json 中的 require 和 require-dev,再比对当前 PHP 环境是否满足所有 ext-xxx 声明。离线机往往环境受限(比如没装 ext-igbinary),但你又不能临时编译扩展。此时它不会跳过,也不会提示“可选”,而是报错退出:
Package your/package is not compatible with your PHP version (8.2.12). You need ext-igbinary *.
这个检查和网络无关,COMPOSER_DISABLE_NETWORK=1 或 --no-network 完全无效。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
用 config.platform 覆盖扩展声明
核心思路:不让 Composer 去“查”真实环境,而是告诉它“你就当这些扩展已存在”。必须在项目级或全局配置中显式声明平台能力:
- 项目级(推荐):运行
composer config platform.ext-redis 7.4.0(版本号任意合法值,如0或*都行,只要不为空) - 同理补全其他缺失扩展:
composer config platform.ext-gd 0、composer config platform.ext-zip 0 - 配置后检查是否生效:
composer config platform应输出类似{"php": "8.2.12", "ext-redis": "0", "ext-gd": "0"} - 注意:该配置会写入
composer.json的config.platform字段,需一并拷贝到离线机
跳过平台检查的硬核方式:--ignore-platform-req
适用于临时调试或 CI 构建,不建议写入长期配置。它绕过所有平台约束,包括 PHP 版本和扩展:
- 只跳过扩展:
composer install --ignore-platform-req=ext-redis --ignore-platform-req=ext-gd - 跳过全部平台要求:
composer install --ignore-platform-req(含 PHP 版本,慎用) - 该参数必须和
--no-plugins --no-scripts同时使用,否则插件可能重新触发检查 - 错误示范:
composer config --global --ignore-platform-req ext-redis——--ignore-platform-req是运行时参数,不能用于config命令
容易被忽略的陷阱
config.platform 只影响依赖解析阶段,不解决运行时崩溃。如果包代码里写了 extension_loaded('redis') 并据此分支逻辑,那即使 Composer 装上了,运行时仍会挂。所以:
- 务必确认业务代码不强依赖缺失扩展的功能
- 若包本身带
ext-xxx在require里(非require-dev),说明它确实需要该扩展才能工作,跳过只是掩耳盗铃 - 某些包(如
laravel/octane)会在post-install-cmd脚本里再次检查扩展,因此必须加--no-scripts - Windows 下路径分隔符和扩展名大小写(如
ext-opensslvsext-OpenSSL)也可能导致匹配失败










