ThinkPHP 升级是企业站最常见的「技术债清理」动作。 本文总结我们做过 20+ 个 TP 升级项目后的真实清单。
升级前:环境核对
- 当前 TP 版本、PHP 版本、Composer 版本
- 服务器 PHP 是否支持新语法(标量参数、返回值类型)
- 扩展依赖:pdo、mysqli、gd、openssl、curl、mbstring
- 目标版本与 PHP 最低版本要求(TP6.0+ 要求 PHP 7.2.5+)
代码层:常见改造点
- 目录结构:从单层 Application/ 拆为 pp/ + 多应用目录
- 命名空间:所有类显式 amespace,去掉 use CommonController
- 配置加载:从 C('VAR') 改为 Config::get('app.var')
- 数据库:M() → Db::name();复杂查询用查询构造器
- 模板:$this->display() → eturn view();标签语法 {:U('x/y')} → {:url('x/y')}
- 行为 Hook:从 ags.php 行为类 → 中间件 middleware
- Session/Cookie:从 session() 函数 → 门面 Session::
数据层:迁移与兼容
- 数据库表结构本身一般无需改(用兼容字段类型)
- 索引、外键、字符集(utf8mb4)重新评估
- 大表(>1 亿行)需要分批迁移 + 双写过渡
接口层:兼容性测试
- 所有 URL 跑一遍回归测试
- API 签名(入参/出参)保持兼容
- 第三方回调(支付、登录、消息推送)路径不变
灰度策略
- 内部测试 → 小流量(5%)→ 30% → 100%
- 数据库 / Session 共享,避免用户态丢失
- 异常监控:HTTP 5xx 率、慢请求率、错误日志关键字
回滚预案
- 代码回滚:Git tag 一键回退
- 数据库:迁移前完整备份 + 迁移脚本可逆
- 缓存:Redis 重建(不依赖缓存)
- CDN:版本化静态资源,5 分钟内回退
我们的经验
TP 升级真正的难点不是「框架语法」,而是「业务理解 + 真实数据 + 真实用户」。 一个完整的 TP 升级项目(含测试 + 灰度)通常需要 2-6 周。 想要定制方案,查看升级服务 或 提交体检。