⼀、介绍
本程序为 Discuz! X3.4 转 Discuz! Q 程序,通过运⾏转换命令可以将 Discuz! X3.4 包括⽤户、版块、普
通主题、回复、附件图⽚等数据转换⾄ Discuz! Q,该程序脚本可以放到任意⽬录。在转换程序开始前,
请保证 Discuz! Q 数据库为全新安装,或者只通过本程序转换过数据。
⼆、环境要求
服务器环境要求为: PHP 7.2.5+
三、配置与使⽤
1、配置
a).数据库链接参数修改
在 config/database.php
⽂件中配置好数据库, 其中 discuzq 为 Discuz! Q 数据库连接信息, discuzx
为 Discuz! X3.4数据库连接信息。
注:若Discuz! X3.4为 gbk 编码,数据库连接信息中的 X数据编码 和 X数据库字符集 保持现有默认配置
即可。
b).测试数据库连接
打开命令⾏窗⼝,在程序根⽬录运⾏ php discoa app:test
命令测试数据库能否正常连接。
c).运⾏ SQL
在 Discuz! Q 数据库运⾏ sql (注意修改表格前缀,如果没有前缀,去掉 pre_ 即可):
ALTER TABLE `pre_users` ADD `salt` CHAR(6) NULL AFTER `password`; ALTER TABLE `pre_posts` CHANGE `content` `content` MEDIUMTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '内容';
d).转换模式选择
转换模式配置,打开 config/config.php ⽂件,配置 “breakpoint_continuation” 。
当breakpoint_continuation的值为 true 时,表示开启断点续转模式,在此模式下执⾏转换命令,
程序会忽略之前转换过的数据;
当breakpoint_continuation的值为 false 时,程序会先检查Q⽬标表是否有多余数据,如果有则停
⽌执⾏对应的转换任务;
ALTER TABLE `pre_users` ADD `salt` CHAR(6) NULL AFTER `password`;
ALTER TABLE `pre_posts` CHANGE `content` `content` MEDIUMTEXT CHARACTER SET
utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '内容';
e).修改 Discuz! Q ⽂件
更新 Discuz! Q 登陆验证⽂件(后期每次Discuz! Q 升级后都需要⼿动添加)。找到 Discuz! Q 程序
⽂件 app/Listeners/User/CheckLogin.php
(72⾏ 附近)
if ($event->password !== '' && !$event->user->checkPassword($event->password)) {
前添加如下代码:
$this->checkSaltPassword($event);
在程序⽂件最后⼀个⼤括号}前,给本⽂件添加如下代码:
/** * @param $event * Discuz! X3.4 密码转换 */ private function checkSaltPassword($event) { if (!empty($event->user->salt) && !empty($event->password)) { $passwordmd5 = preg_match('/^\w{32}$/', $event->password) ? $event- >password : md5($event->password); $passwordmd5 = md5($passwordmd5 . $event->user->salt); if ($event->user->password == $passwordmd5) { $event->user->password = $event->password; $event->user->salt = ''; $event->user->save(); } } }
将转换程序⾥的⽂件 app/Formatter/CustomerConfigurator.php
复制到 Discuz! Q程序
app/Formatter⽬录下,并在 Discuz! Q 程序⽂件 app/Formatter/Formatter.php
中 38⾏ 左右找
到:
parent::confTopic($configurator);
在其后添加如下代码:
CustomerConfigurator::Customer($configurator);
删除 Discuz! Q 程序 storage/Formatter ⽬录下的所有缓存⽂件。
f).上传附件
将 Discuz! X3.4 ⽬录 uc_server/data/avatar 中的所有⽂件上传⾄ Discuz! Q ⽬录
storage/app/public/avatars,如果 avatars 不存在,请⾃⾏创建该⽬录。
将 Discuz! X3.4 ⽬录 data/attachment/forum 中的所有⽂件上传⾄ Discuz! Q ⽬录
storage/app/public/attachments,如果 attachments 不存在,请⾃⾏创建该⽬录。
将 Discuz! X3.4 ⽬录 data/attachment/commom ⽂件夹上传⾄ Discuz! Q ⽬录
storage/app/public/attachments。
将 Discuz! X3.4 ⽬录 static/image/smiley ⽂件夹中的⽂件夹上传⾄ Discuz! Q ⽬录 public/emoji
⽬录。
2、使⽤
Discuz! X3.4 转换 Discuz! Q 命令
a).⼀键转换:
命令⾏模式下,在转换程序根⽬录运⾏ php discoa app:xtq
命令,将完成所有本程序定义过的数据的转
换,包含:⽤户数据、版块数据、主题数据、回复数据、附件数据、表情数据。
b).选择转换:
您可以⾃由选择要转换的数据。您可以使⽤ php discoa app:xtq --option
命令,⾃由选择您需要转换的
数据,--option 有以下可使的⽤参数:
user : ⽤户信息转换。
category : 版块信息转换。
thread : 主题信息转换。
post : 回复信息转换。
attachment : 附件信息转换。
emoji : 表情转换。
count :主题、帖⼦、⽤户信息统计更新。
例如:
php discoa app:xtq user
表示只转换⽤户信息。
php discoa app:xtq thread
表示只转换主题信息。
注意:
若采⽤选择转换,⽤户数据和版块信息⼀定要在主题、回复信息之前进⾏操作。
辅助命令
您可以使⽤ php discoa app:clean cleanDatabase --option 命令清理 Discuz! Q 中数据表数据。您可以
选择以下 --option 参数:
user : 清理⽤户数据。
userWallet : 清理⽤户钱包数据。
category : 清理板块。
thread : 清理主题。
post : 清理回帖。
emoji: 清理转换来的表情。
attachment : 清理附件数据。
不填写 option 参数时,程序将清理以上所有数据。
例如:
php discoa app:clean cleanDatabase
表示清理所有数据。
php discoa app:clean cleanDatabase user
表示清理⽤户数据。
本文作者为Mr.Bai,转载请注明。
文章值得推荐 支持一下博主