直接备份再迁移可行,但TP5.1到6.0.16需代码适配和结构迁移,不能仅复制文件+换vendor;须完成项目完整备份、新环境准备、核心人工迁移动作及分层验证。

直接备份再迁移是可行的,但要注意 ThinkPHP 5.1 到 6.0.16 不是平滑升级,而是框架大版本重构,必须做代码适配和结构迁移。不能只靠“复制文件+换 vendor”完成。
一、项目完整备份(迁移前必做)
备份不是简单打包,要覆盖代码、配置、数据、环境三方面:
-
代码与配置:用
tar -czf tp51-backup-$(date +%Y%m%d).tar.gz --exclude='runtime/*' --exclude='public/static/*' /path/to/tp51打包,排除运行时缓存和静态资源生成目录 -
数据库导出:执行
mysqldump -u用户名 -p 数据库名 > tp51_db_$(date +%Y%m%d).sql,确保含建表语句和数据 -
环境快照:记录 PHP 版本(
php -v)、已启用扩展(php -m | grep -E 'pdo|mbstring|openssl|curl|json')、Web 服务器类型(Nginx/Apache)及伪静态规则
二、新环境准备(TP6.0.16 要求)
ThinkPHP 6.0.16 官方要求 PHP ≥7.2,推荐 PHP 7.4 或 8.0+;MySQL ≥5.7;且必须启用 gmp 和 sodium 扩展(尤其涉及 JWT 或加密功能时)。
- 用 Composer 创建干净 TP6 项目:
composer create-project topthink/think tp6 --stability=stable(自动拉取最新稳定版,含 6.0.16) - 对比旧项目
config/结构:TP6 改为多层级配置(config/app.php、config/database.php等),不再使用单一config.php - 确认
public/index.php入口文件加载方式——TP6 使用think\initializer\Boot启动,不兼容 TP5 的thinkphp/start.php
三、核心迁移动作(非自动,需人工介入)
以下几类改动无法跳过,必须逐项检查并重写:
立即学习“PHP免费学习笔记(深入)”;
-
目录结构:TP6 默认采用
app/模块名/controller/,而 TP5.1 是application/模块名/controller/;route/、view/、model/均需按新规范重新组织 -
路由定义:TP5.1 的
route/route.php中闭包写法(如Route::get('test', function(){}))在 TP6 中需改为控制器方法绑定,或改用app/route/app.php中的数组式定义 -
模型操作:TP5.1 的
Db::name()和Model::get()在 TP6 中统一为Db::table()和model::find(),且where()链式调用返回的是 Query 对象而非 Builder -
助手函数与门面:
url()、input()、session()等全局函数被移除,改用Url::build()、Input::param()、Session::get()等门面类,需引入命名空间或配置别名
四、验证与收尾
迁移后不能只测首页,要分层验证:
- 启动服务:
php think run,检查是否能正常响应 HTTP 请求,无 fatal error - 执行基础数据库操作:新建一条测试记录,用模型
save()写入,再用find()读出,确认 ORM 连通性 - 检查日志路径:
runtime/log/是否可写,错误是否正常落盘(TP6 默认关闭调试模式下的 trace 输出) - 安全加固:删除
public/install.php(如有)、禁用debug = true、校验.env中数据库密码未硬编码



















