直接执行composer show topthink/framework可准确获取已安装的ThinkPHP版本;若报“Package not found”,说明vendor/topthink/framework目录缺失,需检查是否执行过composer install或重装依赖。

直接在项目根目录执行 composer show topthink/framework,就能看到当前安装的 ThinkPHP 版本号;如果报错“Package not found”,说明框架根本没装进 vendor/,别折腾其他方法了,先确认依赖是否真正存在。
为什么 composer show 是最可靠的入口
ThinkPHP 6+ 的包名是 topthink/framework,不是 topthink/think(那是 TP5 的旧包名)。Composer 安装后会把元信息写入 vendor/composer/installed.json,composer show 就是读这个文件——它反映的是真实已安装状态,不是 composer.json 里写的“想装什么”,也不是源码文件里硬编码的常量(可能被覆盖或未更新)。
常见错误现象:
- 在非项目根目录执行,提示
No composer.json found - 用错包名,比如输成
thinkphp/framework或TopThink/Framework,大小写敏感,必须全小写 - 执行了
composer install但中途失败,vendor/topthink/framework目录为空,composer show必然查不到
php think -v 和 App::version() 的适用边界
这两个命令依赖框架已能正常启动,适合验证“运行时版本”是否与安装一致。但它们有前提:入口文件能加载、类自动加载正常、没有 fatal error。
立即学习“PHP免费学习笔记(深入)”;
使用场景:
-
php think -v:只在 ThinkPHP 6+ 有效,TP5 不带这个命令;若提示Could not open input file: think,说明think文件缺失或权限不对 -
App::version():需在控制器或可执行上下文中调用,且必须use think\facade\App;;TP5.0 用的是THINK_VERSION常量,TP5.1+ 才迁移到App::version() - 两者都可能返回缓存值或开发环境误配结果,比如
composer.json写着"topthink/framework": "^6.1",但实际装的是6.1.0,而代码里硬改过常量,就会不一致
查看 composer.json 只能看“声明版本”,不能代替验证
composer.json 中的 "topthink/framework": "6.0.*" 表示允许安装任意 6.0.x 版本,并不等于当前实际装的是哪个。尤其当项目经历过多次 composer update,或有人手动改过 vendor/,声明和现实就可能脱节。
正确做法:
- 先看
composer.json确认期望版本范围 - 再执行
composer show topthink/framework确认实际安装版本 - 最后比对二者:如果
show输出的版本不在composer.json的约束范围内,说明本地环境异常(如被强制install --ignore-platform-reqs过)
遇到 “Package not found” 别急着重装
这个错误只说明 topthink/framework 没出现在 vendor/composer/installed.json 里,原因往往很具体:
-
vendor/topthink/framework目录确实不存在——检查是否漏执行composer install,或执行时网络中断导致下载失败 - 包被
replace规则屏蔽了——有些定制版 TP 会在composer.json里写"replace": {"topthink/framework": "*"},这时show查不到,得看vendor/下实际存在的目录名 - 用了镜像源但同步滞后——运行
composer config -g repo.packagist确认当前源是否可用,必要时切回官方源:composer config -g repo.packagist https://packagist.org
最省事的兜底动作:删掉 vendor/ 和 composer.lock,重新 composer install,再跑一次 composer show topthink/framework ——只要网络通、PHP 版本够(≥7.1),这一步几乎总能拿到真实版本号。



















