TYPO3 v10升级至v12求助:传统模式下升级步骤及故障解决
TYPO3 v10 升级到 v12 分步指南及扩展检查器问题解决
一、前期必做准备
- 全量备份:把整个站点的文件打包,数据库导出SQL文件,确保备份能正常恢复——这步绝对不能省,出问题全靠它回滚。
- 搭测试环境:在本地或测试服务器上复制生产环境,PHP版本先匹配v10要求(7.2-7.4),别直接动生产站。
- 列扩展清单:从后台“扩展管理”导出已装扩展列表,或者直接看
typo3conf/ext目录,标记清楚哪些是TER扩展、哪些是自己写的自定义扩展。
二、先从传统模式转Composer模式(v12仅支持Composer,这步绕不开)
- 装Composer:在测试环境的站点根目录执行这几条命令:
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" php composer-setup.php php -r "unlink('composer-setup.php');" - 初始化Composer项目:
- 运行
composer init,跟着提示填信息,注意把TYPO3的基础包设为typo3/cms-base-distribution - 拉取v10的Composer依赖:
composer require typo3/cms-base-distribution:^10.4
- 运行
- 迁移现有内容:
- 把原
typo3conf下的LocalConfiguration.php、AdditionalConfiguration.php复制到新的config目录(Composer模式下配置文件换位置了) - 复制
fileadmin、uploads(如果有)到站点根目录 - 迁移扩展:
- TER扩展:去TER上找对应扩展的Composer包名(比如新闻扩展是
typo3/cms-news),用composer require [包名]:^对应v10的版本安装 - 自定义扩展:把扩展文件夹放到
packages目录,然后在composer.json里加本地仓库配置:
再执行"repositories": [ { "type": "path", "url": "packages/*" } ]composer require [你的扩展vendor/name]:dev-main(具体版本看扩展自己的composer.json)
- TER扩展:去TER上找对应扩展的Composer包名(比如新闻扩展是
- 把原
- 验证运行:执行
composer install,然后访问站点,确保后台能登录,前端正常显示。
三、分版本升级:先升v11,再升v12(跨版本直接升必炸)
第一步:升级到TYPO3 v11 LTS
- 先把PHP版本升到7.4-8.0(v11的要求)
- 更新Composer依赖:
- 执行
composer require typo3/cms-base-distribution:^11.5 --with-all-dependencies - 处理依赖冲突:如果某个扩展不支持v11,要么找更新版本,要么先禁用,记下来后续处理
- 执行
- 跑升级向导:
- 登录后台,进“系统>升级向导”,把所有提示的步骤都执行完(包括数据库结构更新、配置迁移)
- 适配自定义扩展:改
ext_emconf.php和composer.json里的TYPO3版本依赖为^11.5,修复代码里的废弃API(v10的一些函数在v11会抛警告,直接换成新API)
- 测试:确保前端、后台所有功能正常,扩展都能跑。
第二步:升级到TYPO3 v12 LTS
- 把PHP版本升到8.1-8.2(v12的要求)
- 更新Composer依赖:
- 执行
composer require typo3/cms-base-distribution:^12.4 --with-all-dependencies - 处理依赖冲突:TER扩展不支持v12的,要么找兼容版,要么换替代扩展;自定义扩展要全面适配v12的API——比如把旧钩子换成事件订阅者,把
ext_tables.php里的TCA移到Configuration/TCA目录,用依赖注入替代GeneralUtility::makeInstance()之类的。
- 执行
- 跑升级向导:
- 执行后台的升级向导,完成数据库更新和配置迁移
- 调整配置:v12改了不少
$GLOBALS['TYPO3_CONF_VARS']里的选项,对照官方文档把旧配置换成新的。
- 全面测试:每个功能都测一遍,包括前端页面、后台操作、扩展功能,遇到报错逐个修复。
四、解决扩展检查器卡顿崩溃问题
- 大概率是内存不够或者某个扩展有致命代码问题导致的,按下面的方法来:
- 加内存限制:在
php.ini里把memory_limit设成256M(或更高),或者在AdditionalConfiguration.php里加ini_set('memory_limit', '256M'); - 分批排查:别一次性检查所有扩展,先禁用一半,跑检查器,找到导致崩溃的那批;再细分,定位到具体扩展后,单独查它的代码(比如语法错误、调用了已移除的API)
- 手动检查自定义扩展:直接对照TYPO3 v10到v12的升级文档,挨个查代码里的废弃项,比如:
- TCA配置要从
ext_tables.php移到Configuration/TCA目录 - 替换
GeneralUtility::makeInstance()为构造注入/依赖注入 - 旧钩子换成事件订阅者
- TCA配置要从
- 清缓存:跑检查器前,清空TYPO3所有缓存(后台点“系统>清理缓存”,或者删
var/cache下的文件)
- 加内存限制:在
内容的提问来源于stack exchange,提问作者anisgh
相关产品推荐
相关产品推荐

