HQBSH.com的whois记录显示注册于2013年1月18日,至今已经持续运营了:0年0个月0天零0小时0分钟0秒

最新报价
 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 71|回复: 2

关于Discuz3.2-4升级到3.5的自动化程序及指令,以及可能遇见的转码问题

[复制链接]

4910

主题

628

回帖

2927

银子

管理员

积分
86305

推广达人宣传达人突出贡献优秀版主荣誉管理论坛元老

QQ
发表于 | 显示全部楼层 |阅读模式
discuz官网放出来的3.4升3.5教程,要反复摸索才能明白。很不方便。特别是对小白。

这里,我说一下升级的具体流程以及因本次gbk等统一升级到utf8可以遇见的大量转码问题的坑 。特别对于老站,很实用。


首先,一定要有一个测试环境 ,用来先测试好升级成功,然后再服务器上面升级。这点很重要。
测试环境 推荐用centos8.5的boot安装盘,不到1g。下载了安装。然后设定一个固定IP地址。之后把该 装的httpd,vsftp什么的都装一下,让他和服务器环境 至。
同时,把mysql设定在7.4版本。
具体怎么降的,网上有。不是本文讨论重点。
这里说的3.4升级3.5,分为三步。
1。升级uc,从1.6升级到1.7
2.升级discuz。
3.清除升级文件。


万事从头起,先来说准备工作。
把dx下载了最新版,然后上传到/d/temp/dx下面,真正需要的文件在/d/temp/dx/upload里面。
另外下载admin升级文件,和uc_admin两个升级文件。也放在/d/temp/下面。这里升级时候会备用。


在这里,我假定www目录为程序所在文件夹目录,bbs为mysql里面数据库文件名。
数据的备份文件在/d/databack里面
好了。先做重置工作。
新建2个备用文件夹,
  1. <font size="5">mkdir /d/old&mkdir /d/old_1</font>
复制代码


然后初始化测试环境。
  1. <font size="5">\rm -fr /d/old/*&\rm -fr /d/old_1/*&\rm -fr /d/www/*</font>
复制代码


然后清空并导入备份数据库
  1. <font size="5">mysql -uroot -p
  2. drop database bbs;
  3. create database bbs;
  4. use bbs;
  5. source /d/databack/www.sql;
  6. exit</font>
复制代码


接下来把程序文件也解压出来
  1. <font size="5">unzip -o /d/databack/www.zip -d /</font>
复制代码
至此,测试环境已经准备完成。
这里需要大量的工作,但是这是该 有的行为,如果在服务器上面直接升级,前面这些都不需要。


好了,下面开始办正事,先升级UC到1.7
  1. <font size="5">python3 /d/temp/temp.py -d www -n 1</font>
复制代码
到这里,会提示升级准备工作完成,请执行升级文件。
那有人会问了,这个temp.py是从哪里来的?别急,这个python代码我现在贴上来。
  1. <font size="5">#coding:utf-8
  2. #by yh6788
  3. #python3
  4. #清除firewall-cmd --zone=public --list-rich-rules列表的IP限制
  5. #

  6. import optparse
  7. import sys,os,time


  8. def start(filedir,dir_dx):
  9.         print('执行开始升级uc程序。')
  10.         os.system('\\rm /d/old/* -r')
  11.         os.system('\\rm /d/old_1/* -r')
  12.         os.system('mkdir /d/old')
  13.         os.popen('\cp /d/%s/uc_server/* /d/old -r'%filedir)
  14.         time.sleep(10)
  15.         os.system('\\rm /d/%s/uc_server/* -r'%filedir)
  16.         os.system('\cp /d/old/data /d/%s/uc_server -r'%filedir)
  17.         os.system('\cp %s/uc_server/* /d/%s/uc_server -r'%(dir_dx,filedir))
  18.         os.system('\cp /d/temp/update_ucenter_adult.php /d/%s/uc_server/install'%filedir)
  19.         os.system('\\rm /d/%s/uc_server/data/upgrade.lock'%filedir)
  20.         os.system('chmod 777 /d/%s -R'%filedir)
  21.         print('UC升级程序准备完事,请执行%s.com/uc_server/install/update_ucenter_adult.php'%filedir)

  22. def dx(dir_file,dir_dx):
  23.         print('执行dx3.5升级程序')
  24.         os.system('mkdir /d/old_1')
  25.         os.popen('\cp /d/%s/* /d/old_1 -r'%dir_file)
  26.         time.sleep(10)
  27.         os.system('\\rm /d/%s/* -r'%dir_file)
  28.         os.popen('\cp /d/old_1/data /d/%s/ -r'%dir_file)
  29.         os.popen('\cp /d/old_1/config /d/%s/ -r'%dir_file)
  30.         os.popen('\cp /d/old_1/uc_server /d/%s/ -r'%dir_file)
  31.         os.system('mkdir /d/%s/source'%dir_file)
  32.         os.system('mkdir /d/%s/template'%dir_file)
  33.         os.system('mkdir /d/%s/source/plugin'%dir_file)
  34.         os.popen('\cp /d/old_1/source/plugin/* /d/%s/source/plugin -r'%dir_file)
  35.         os.popen('\cp /d/old_1/template/* /d/%s/template -r'%dir_file)
  36.         time.sleep(10)
  37.         os.system('\\rm /d/%s/source/plugin/default -r'%dir_file)
  38.         os.system('\\rm /d/%s/template/default -r'%dir_file)
  39.         os.popen('\cp %s/* /d/%s/ -r'%(dir_dx,dir_file))
  40.         time.sleep(10)
  41.         os.system('\cp /d/temp/update_adult.php /d/%s/install'%dir_file)
  42.         os.system('\\rm /d/%s/data/update.lock'%dir_file)
  43.         os.system('chmod 777 /d/%s -R'%dir_file)
  44.         print('3.5升级程序完成,准备执行%s.com/install/update_adult.php'%dir_file)
  45.        
  46. def kill(dir_file,dir_dx):
  47.         os.system('\\rm /d/%s/install/update_adult.php'%dir_file)
  48.         os.system('\\rm /d/%s/uc_server/install/update_ucenter_adult.php'%dir_file)
  49.         os.popen('\cp /d/old_1/static/image/common/logo.png /d/%s/static/image/common/'%dir_file)
  50.         print('升级文件删除成功')
  51. def main():

  52.         a=time.asctime( time.localtime(time.time()) )
  53.         parser = optparse.OptionParser()
  54.         parser.add_option('-d', dest='filedir', type='string', help="文件夹")
  55.         parser.add_option('-n', dest='nb', type='string', help="1,开始,升级uc。2,继续,升级dx。3。升级完成,清理。")
  56.         (options, args) = parser.parse_args()
  57.         if not (options.filedir) or not (options.nb):
  58.                 print('缺少参数,返回.\n-d:指定文件夹\n-n:1,开始,升级uc。2,继续,升级dx。3。升级完成,清理。')
  59.                 return False
  60.         filedir=options.filedir
  61.         nb=options.nb

  62.         dir_dx='/d/temp/dx/upload'

  63.         if nb=='1':
  64.                 start(filedir,dir_dx)
  65.         elif nb=='2':
  66.                 dx(filedir,dir_dx)
  67.         elif nb=='3':
  68.                 kill(filedir,dir_dx)
  69.                
  70.         else:
  71.                 pass
  72.         print(a)
  73. if __name__ == '__main__':
  74.         main()</font>
复制代码


这个程序本来是123步全集成的,但是问题是小网站还行,文件只有几十M,但是大网站,随便几个G的话,那么cp的时候就会时间过长。这样就会产生一个问题,
就是说os.system()程序执行了,但是不是马上出结果,因为程序复制的慢。但是os的并不是执行一个程序等待完成了再执行下一个指令,而新建一个子进程,发出执行命令,但是不管是不是返回结果,都会执行下一条,这样当cp没完成的,就会产生后面的程序执行出错。
如果放个time.sleep(10)这种的话,倒是可以,但是你并不能判断多久时间,所以只能留足够的时候,这样又没意思。


那么有没有人不想用程序,非要自己手动着来的呢?
也行,这里把指令也列出来。
你看我做了多少准备工作,这里我都有。

  1. \cp /d/www/uc_server/* /d/old -r
  2. \rm /d/www/uc_server/* -r
  3. \cp /d/old/data /d/www/uc_server -r
  4. \cp /d/temp/dx_back/_server/* /d/www/uc_server -r
  5. \cp /d/temp/update_ucenter_adult.php /d/www/uc_server/install
  6. \rm /d/www/uc_server/data/upgrade.lock
  7. chmod 777 /d -R
复制代码
行了,到这里就执行升级程序,假定固定IP:192.168.0.222,http://192.168.0.222//install/update_adult.php
2023-05-04_115322.png

看见全绿,就可以了。
原来是1.6版本,要升级到1.7版本。好了,这里可以升级了。
我有点事,下午再把后面接上来,特别是第2步,有好多坑。
QQ:78950405,tel:18938079527(微信同号),email:yh6788@163.com
回复

使用道具 举报

4910

主题

628

回帖

2927

银子

管理员

积分
86305

推广达人宣传达人突出贡献优秀版主荣誉管理论坛元老

QQ
 楼主| 发表于 | 显示全部楼层
行了,至此1.7升级好了,现在开始2步。

但是python3 /d/temp/temp.py -d www -n 2这个指令并不有效的了,如果你是小网站就可以。
但是如果你是大网站,就会复制时间不够。
那么就要走指令了。
思路是把文件复制到old_1里面备份,然后把需要的文件复制回来。
  1. \rm /d/old_1/* -r
  2. \cp /d/www/* /d/old_1 -r
  3. \rm /d/www/* -r
  4. \cp /d/old_1/data /d/www/ -r
  5. \cp /d/old_1/config /d/www/ -r
  6. \cp /d/old_1/uc_server /d/www/ -r
  7. mkdir /d/www/source
  8. mkdir /d/www/source/plugin
  9. mkdir /d/www/template

  10. \cp /d/old_1/source/plugin/* /d/www/source/plugin -r
  11. \cp /d/old_1/template/* /d/www/template -r
  12. \rm /d/www/template/default -r
  13. \rm /d/www/source/plugin/default -r

  14. \cp /d/temp/dx_back/upload/* /d/www -r
  15. \cp /d/temp/update_adult.php /d/www/install
  16. \rm /d/www/data/update.lock
  17. chmod 777 /d/www -R
复制代码
一步一步来,不要急。
把这些全搞定之后,就执行:
http://192.168.0.222//install/update_adult.php
如果正常的话就开始升级,但是这里面经常遇见问题,
如果遇见问题,解决的思路就是2个,一个是因为这次要转码,特别是gbk转utf8,所以要大量的转换内容。另一个问题就是检测UC通信。很多人升级前通信是正常的,但是升级后通信就出问题。

所以,一旦出现问题,第一步,把所有插件关了,重新来一次。
如果还不行,就看情况。
如果出现这个提示:
2023-05-03_150900.png

就是UC通信有问题。
进入/uc_server/admin.php里面查看通信是不是正常。
如果调整不来,就不管这里,直接进程序里调整。
这里主要调整的是/config/config_ucserver.php还有/uc_server/data/conffig什么的.php
思路如图: 2023-05-03_150945.png
首先,检查两个文件的key是不是一致,
然后检查有没有APP_ID这个选项,没有的话就补上去,另外有个APP_API,这里有些人是和key一样的,这里也要改一下,改成服务器的/uc_server
2023-05-03_151153.png

这些都改完了,看一下uc_server/admin里面通信是不是好的,如果不是好的,也不重要,主要是刷新一下3.5升级页面,看是不是变好了,如果已经1.7通过了,就是通信是好的,可以正常安装了。
这里有些人到这里还是不行,那是因为用了301跳转。这时候就把/d/www/.htcssecc这个文件删除了。这样就可以了。或者把301全部#掉。



QQ:78950405,tel:18938079527(微信同号),email:yh6788@163.com
回复

使用道具 举报

4910

主题

628

回帖

2927

银子

管理员

积分
86305

推广达人宣传达人突出贡献优秀版主荣誉管理论坛元老

QQ
 楼主| 发表于 | 显示全部楼层
接下来就会遇见一个新坑了,转码。
GBK转UTF8,因为这次要转码,很多插件关了,但是还是会有一些程序转不了,就会有类似这样的提示:

2023-05-03_152941.png

这就是说程序不行,要手动着来。
这里要操作数据库了。这个页面不关,先在ssh里面处理一下问题。
首先:mysql -uroot -p进去。
然后use BBS把论坛数据库打开。
然后把pre——什么的这些名字复制下来,先检查一下列表在不在,是不是gbk。
  1. show create table pre_common_member_temp___;
复制代码
这里要注意结尾;,和php一样。
同时,这个show就很明显的,就是看一下,并不解决问题。当然,看的目的是确认数据问题存在。
然后就执行另一个指令解决问题:
  1. ALTER TABLE pre_common_member_temp___  DEFAULT CHARACTER SET utf8;
复制代码
这里之后,mysql会回复一个执行完成给你。你回到浏览器,在错误页面刷新一下,3.5升级就继续进行了。
跟据网站复杂度,这个错误有可能出现多次,每次都是不同的表,这时候就把名字替换一下解决就行。一直到出现3。5升级完成。
这个时候,如果你是旧的3.4模板的窄版,你可能会出现首页变宽,并且调整无效,那么你就这里改一下:
2023-05-03_161751.png


然后你还可以出现部分图标丢失,而在discuz的模认模板也同样错误。这也不要急,这是模板文件位置不对,你重新下载一个3.5的模板,换一个测试一下就好了。

至此,全部安装过完成,要做一下清理安装文件:
python3 /d/temp/temp.py -d www -n 3

好了,3。5升级转码已经完成,有问题欢迎在华强北商行网站留言,不懂的地方可以直接咨询站长。
QQ:78950405,tel:18938079527(微信同号),email:yh6788@163.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 QQ登录

本版积分规则

在线客服
马上联系
加好友78950405
微信联系8618938079527
微信联系
电话联系
联系电话18938079527
工作时间
11:00-22:00