ThinkPHP 升级是企业站最常见的「技术债清理」动作。 本文总结我们做过 20+ 个 TP 升级项目后的真实清单。

升级前:环境核对

  • 当前 TP 版本、PHP 版本、Composer 版本
  • 服务器 PHP 是否支持新语法(标量参数、返回值类型)
  • 扩展依赖:pdo、mysqli、gd、openssl、curl、mbstring
  • 目标版本与 PHP 最低版本要求(TP6.0+ 要求 PHP 7.2.5+)

代码层:常见改造点

  1. 目录结构:从单层 Application/ 拆为 pp/ + 多应用目录
  2. 命名空间:所有类显式 amespace,去掉 use CommonController
  3. 配置加载:从 C('VAR') 改为 Config::get('app.var')
  4. 数据库:M() → Db::name();复杂查询用查询构造器
  5. 模板:$this->display() → eturn view();标签语法 {:U('x/y')} → {:url('x/y')}
  6. 行为 Hook:从 ags.php 行为类 → 中间件 middleware
  7. Session/Cookie:从 session() 函数 → 门面 Session::

数据层:迁移与兼容

  • 数据库表结构本身一般无需改(用兼容字段类型)
  • 索引、外键、字符集(utf8mb4)重新评估
  • 大表(>1 亿行)需要分批迁移 + 双写过渡

接口层:兼容性测试

  • 所有 URL 跑一遍回归测试
  • API 签名(入参/出参)保持兼容
  • 第三方回调(支付、登录、消息推送)路径不变

灰度策略

  1. 内部测试 → 小流量(5%)→ 30% → 100%
  2. 数据库 / Session 共享,避免用户态丢失
  3. 异常监控:HTTP 5xx 率、慢请求率、错误日志关键字

回滚预案

  • 代码回滚:Git tag 一键回退
  • 数据库:迁移前完整备份 + 迁移脚本可逆
  • 缓存:Redis 重建(不依赖缓存)
  • CDN:版本化静态资源,5 分钟内回退

我们的经验

TP 升级真正的难点不是「框架语法」,而是「业务理解 + 真实数据 + 真实用户」。 一个完整的 TP 升级项目(含测试 + 灰度)通常需要 2-6 周。 想要定制方案,查看升级服务 或 提交体检。