ThinkPHP 6.0.7 升级到 8.0 是结构级迁移,须在独立环境完成:先确认 PHP ≥ 8.0(推荐 8.1/8.2)且 CLI/Web SAPI 一致,检查必需扩展;再用 Composer 2.x 运行 check-platform-reqs 验证 think-orm ≥ 3.0 等依赖;最后预检 PHP 8 静默变更、目录结构(application→app)、配置加载(config/扁平化)及命名空间调整。

ThinkPHP 6.0.7 升级到 8.0 不是版本号替换,而是结构级迁移。环境检测是第一道关卡,必须在独立测试环境完成,不能跳过或凭经验判断。
PHP 与扩展硬性要求
TP8 明确要求 PHP 8.0+(推荐 8.1 或 8.2),而 TP6.0.7 可运行于 PHP 7.2+,因此升级前必须确认当前 PHP 版本:
- 执行 php -v 查看实际版本;若低于 8.0,需先升级 PHP 运行时(如 Ubuntu 可用 apt install php8.2-cli php8.2-mysql php8.2-mbstring php8.2-xml php8.2-opcache)
- TP8 依赖的扩展比 TP6 更严格:除 pdo、mbstring、openssl 外,fileinfo 和 json 必须启用;可用 php -m | grep -E "pdo|mbstring|openssl|fileinfo|json" 快速核对
- 注意 CLI 和 Web SAPI(如 Nginx + PHP-FPM)使用同一 PHP 版本,否则会出现“本地能跑、线上白屏”现象
Composer 与依赖兼容性扫描
TP8 使用 Composer 2.x 作为标准依赖管理器,且对第三方包有明确约束:
修复 Core bailout 状态损坏安全问题,以及 BZ2、DOM、PDO、Opcache/JIT 内存与执行错误,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
- 运行 composer --version 确认是否为 2.x;若为 1.x,需升级:composer self-update --2
- 执行 composer check-platform-reqs,重点检查:
- topthink/framework 是否已移除(TP8 不再提供该包)
- topthink/think-orm 是否 ≥ 3.0(TP6.0.7 默认可能为 2.x)
- 其他插件(如验证码、Excel 导出等)是否声明支持 PHP 8.0+
- 若有不兼容项,优先查其 GitHub Release 页面或 Packagist 的 requires 字段,确认是否有适配 TP8 的新版
运行时行为差异预检
PHP 8 引入了多项静默变更,即使语法无误,逻辑也可能出错:
立即学习“PHP免费学习笔记(深入)”;
- 松散比较:'123abc' == 123 在 PHP 7 返回 true,PHP 8 返回 false;重点检查权限判断、状态码匹配等位置
- match 表达式不再自动类型转换,match($_GET['id']) { 1 => 'admin' } 中传入字符串 '1' 将不命中,需统一转为 int 或改用 switch
- 函数参数顺序变更:如 implode($arr, ',') 在 PHP 8 报错,必须改为 implode(',', $arr)
- 禁用函数检查:TP8 默认更严格,确认 php.ini 中未禁用 unserialize、call_user_func_array 等框架必需函数
项目结构与配置前置验证
TP8 废除了 TP6 的部分约定,需提前识别结构风险点:
- 检查是否存在 application/ 目录:TP8 统一使用 app/,所有控制器、模型命名空间需从 app\index\controller 开始,而非旧版 app\index\controller(注意路径映射一致性)
- 确认 config/ 下无嵌套子目录(如 config/database/mysql.php),TP8 要求所有配置文件扁平放置(config/database.php)并显式加载
- 搜索代码中是否残留 config('database.hostname') 写法,TP8 必须改为 Config::get('database.hostname') 并确保已调用 Config::load()


















