composer show -p 不显示系统信息,仅输出已安装包的符号链接路径;正确查看PHP环境应使用 composer show --platform,它返回实际运行时的PHP版本、扩展、库及ini配置。

composer show -p 不显示任何系统信息,它只输出已安装包的符号链接路径(如果存在),且完全不涉及 PHP 版本、扩展、OS 类型或环境变量。
为什么 show -p 容易被误认为能查系统信息
很多人看到 -p 就联想到 “platform” 或 “path”,但这里的 p 实际是 --package 的旧别名残留(Composer 1.x 时期),在 2.x 中已被弃用;当前行为是 --path 的简写,仅作用于包路径查询。
- 执行
composer show -p php或composer show -p ext-mbstring会直接报错Package not found—— 因为php和扩展不是 Composer 包,不在vendor/下安装 -
composer show -p必须后接真实安装的第三方包名,如monolog/monolog,否则无输出 - 它不读取
composer.json的platform配置段,也不校验当前 PHP 是否满足该配置
composer show --platform 才是查系统环境的正确命令
真正返回 PHP 运行时信息的是 --platform 选项,它列出 Composer 当前调用的 PHP 解释器所暴露的全部平台能力:
-
php.version:实际运行的 PHP 版本(如8.1.13),不是composer.json里写的config.platform.php -
ext-*列表:已加载的扩展名及版本(如ext-openssl 8.1.13),缺失项会直接标为missing -
lib-*条目:底层库支持(如lib-curl,lib-zlib) -
memory_limit、max_execution_time等 ini 设置值
这个命令等价于让 Composer 主动调用 php -r "print_r(get_loaded_extensions());" 并结构化输出,结果可信度高,适合部署前核对 ThinkPHP 或 Laravel 的环境要求。
想看 Composer 自身依赖的 PHP 版本范围?别用 show,改用 show --self 加过滤
composer show --self 显示 Composer 自身的元数据,其中 require.php 字段才是它声明的最低 PHP 兼容版本:
composer show --self | grep "require.php"
输出类似:"require": {"php": "^7.2.5 || ^8.0"}。注意这和你本地 PHP 版本无关,只是 Composer PHAR 构建时的约束声明。
若需确认当前 Composer 是否能在你的 PHP 上跑,应优先跑 composer diagnose,它会把 require.php 声明和实际 php -v 结果做比对并明确提示 OK 或 FAIL。
总结一句:别指望 show -p 告诉你系统信息,它连当前目录在哪都不关心
它的输出就是一行路径,而且还是可能指向缓存目录的软链;真要排查环境兼容性,composer --version 看自身、composer show --platform 看 PHP、composer diagnose 做全检——三者各司其职,混用只会浪费时间。


















