composer show -p 查的是 Composer 构建的平台能力快照,非真实加载的扩展;它基于 PlatformRepository,受 config.platform 配置影响,可能与 php -m 结果不一致,应以 php -m 或 php -r "print_r(get_loaded_extensions());" 为准。

composer show -p 实际查的是平台包,不是“已安装的扩展”列表
它输出的是 Composer 认为当前环境具备的能力,而不是系统里真实加载的扩展清单。比如你没装 ext-pdo,但 composer.json 里写了 "platform": {"ext-pdo": "8.1.0"},composer show -p 就会照着显示,哪怕 PHP 根本没加载这个扩展。
常见错误现象:
- CI 环境跑
composer show -p | grep ext-redis返回空,结果部署时才报错 —— 因为 build 阶段没加载扩展,但 runtime 才加载 - 本地
php -m显示有ext-gd,但composer show -p不出现 —— 可能是config.platform里显式设了"ext-gd": false - 执行
composer show -p php报错Package not found——-p后不能跟具体包名,它只接受无参数或带--all
想确认扩展是否真被 PHP 加载?别依赖 show -p
composer show -p 的输出基于 PlatformRepository,可能被配置覆盖、也可能漏检。真正可信的只有 PHP 自身的运行时反馈。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 检查扩展是否启用:
php -m | grep pdo或php -i | grep 'pdo.*enabled' - 看完整扩展列表:
php -r "print_r(get_loaded_extensions());" - 验证
composer.json中config.platform是否干扰:grep -A5 'platform' composer.json - 容器中特别注意:PHP CLI 和 FPM 的
php.ini可能不同,composer show -p走的是 CLI 环境
show -p 和 show --platform 完全等价,但和 show --self / show vendor/name 截然不同
-p 是 --platform 的缩写,不是 --package 或 --path。它不查 vendor/,也不读 installed.json,只查 Composer 内部构建的平台能力快照。
-
composer show -p→ 输出php、ext-json、lib-curl这类虚拟包 -
composer show monolog/monolog→ 输出该包的版本、描述、依赖、源地址等元数据 -
composer show --self→ 查 Composer 自身的require.php声明,和你本地 PHP 版本无关 -
composer show -p -v→ 加详细模式,会显示每个平台包的约束条件(如php: ^8.1)
排查环境兼容性,优先用 diagnose + show --platform 组合
单靠 show -p 容易误判,尤其在多阶段构建、Docker、共享宿主等场景下。它反映的是 Composer “视角下的平台”,不是操作系统或 PHP 解释器的真实状态。
- 第一步:
composer diagnose—— 它会比对composer.json的platform声明和实际php -v、php -m结果,明确提示 OK 或 FAIL - 第二步:
composer show --platform—— 看当前运行时检测到的 PHP 版本、扩展、ini设置(如memory_limit),这才是部署前该核对的清单 - 第三步:若需脚本化验证,直接调
php -r检查关键扩展,比解析composer show -p输出更可靠
最常被忽略的一点:平台包列表里没有 ext-* 条目,不代表扩展缺失;有,也不代表一定能用 —— 它只是 Composer 构建依赖图时用的输入信号,不是运行时保障。

















