thinkphp 3.2 升级到 5.x 是跨代重构,需新建项目、重写目录结构与命名空间、迁移配置与路由、替换数据库与模板调用方式,并适配缓存、上传、url 生成等全部基础功能。

ThinkPHP 3.2 升级到 5.x 不是“小版本更新”,而是跨代重构——目录结构、路由机制、数据库层、模板引擎、自动加载全部重写,直接改 composer.json 或覆盖文件必然失败。
确认当前环境是否支持 TP5(PHP + 扩展)
TP5 要求 PHP ≥ 5.4.0(推荐 ≥ 5.6),且必须启用 mbstring、openssl、pdo、json、curl。TP3.2 可以跑在 PHP 5.3 上,但 TP5 不行。
- 执行
php -v查 CLI 版本;用phpinfo()或php -r "echo PHP_SAPI;"确认 Web SAPI(如fpm-fcgi)是否一致 - TP3.2 的
Runtime/目录默认可写,但 TP5 的runtime/需要更严格权限(755 或 775),且不能放在 Web 可访问路径下 - 若项目用了
topthink/think-queue或自定义extend/类库,需确认它们是否兼容 PSR-4 自动加载 —— TP5 废弃了 TP3.2 的Lib/和Common/模式
不要直接 composer require topthink/framework=5.*
TP3.2 是单入口 + 手动加载,没有 composer.json 管理核心;硬加 TP5 依赖会导致自动加载冲突、Class 'Think\App' 找不到、vendor/autoload.php 和 ThinkPHP/Library/Think/Think.class.php 同时被引入而报致命错误。
- 正确做法:新建空目录,用
composer create-project topthink/think=5.1.* tp5-app(推荐从 5.1 开始,非最新 5.3,因 5.1 文档最全、生态最稳) - 把原 TP3.2 的
Application/Home/Controller/逐个重构成 TP5 的app/index/controller/,注意命名空间从Home\Controller\IndexController改为app\index\controller\Index -
config.php和database.php要拆成多个小文件,放进config/目录,且格式从 PHP 数组改为 return 数组(无return会报错)
路由和控制器调用方式完全不同
TP3.2 默认 URL 是 index.php?m=Home&c=Index&a=index,TP5 默认是 index.php/index/index/index,且不带模块名(除非开启 url_common_param)。硬搬旧路由规则会导致 404 或无限重定向。
- TP5 的路由定义在
route/route.php,不是Conf/config.php;URL_MODEL配置已移除,改用url_route_must和url_html_suffix -
$this->display()在 TP5 中必须显式引入模板引擎:use think\View;,或直接用return view('index'); - TP3.2 的
A('User') → D('User')全部失效;TP5 统一用模型类app\index\model\User,且必须继承think\Model - 数据库查询中,
M('user')已废弃,改用Db::name('user')或UserModel::all()
缓存、Session、上传等基础功能需重适配
TP3.2 的 session_start() 手动调用、S() 缓存函数、U() 生成 URL,在 TP5 中全部语义变更或废弃,不改就会静默失败或返回空。
-
S('key', $val)→ 改用cache('key', $val)(需确保cache配置项存在)或Cache::set('key', $val) -
U('Index/index')→ 改用url('index/index'),且必须先在路由中注册该地址,否则返回空字符串 - 上传类
Think\Upload已移除,改用think\File和request()->file('image') - TP3.2 的
__ROOT__常量在 TP5 中不存在,前端资源路径建议用__STATIC__/或配置view_replace_str
最易被忽略的是:TP3.2 的 Common/function.php 是自动加载的,TP5 的 app/common.php 默认不加载,必须在 app/provider.php 中手动添加 app\common.php 路径,否则所有自定义函数都不可用。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











