Discuz!报错问题汇总
1、解决 X3.2 全局 HTTPS 问题思路
购买 SSL 证书
购买适合自己论坛的 SSL 证书,证书大致上分为标准型 DV SSL 证书、企业型 OV SSL 证书以及增强型 EV SSL 证书。
在服务端 WEB 服务器配置
参考文档:点击具体查看各种 WEB 服务器配置
在后台配置全局 HTTPS
进入 admin.php 后台,点击全局 - 站点信息 - 网站 URL 填写 https://yourdomain.com/admin.php
修成 Discuz 适配 https
如果你的 Web 服务是 Apache,请忽略这一步,Nginx 请继续看
Discuz 判断网站是否启动 SSL 是采用 $_SERVER[‘HTTPS’] 的方式,此方法不支持 Nginx(nginx+php-fpm),需要先做一些修改,让 Discuz 使用 $_SERVER[‘SERVER_PORT’]来判断网站是否启用 SSL
进入安装 DIscuz 根目录右键修改 public_html/source/class/discuz/discuz_application.php
1 | $_G['isHTTPS'] = ($_SERVER['HTTPS'] && strtolower($_SERVER['HTTPS']) != 'off') ? true : false; |
修改为:
1 | $_G['isHTTPS'] = ($_SERVER['SERVER_PORT'] == 443 || $_SERVER['HTTPS'] && strtolower($_SERVER['HTTPS']) != 'off') ? true : false; |
进入安装 DIscuz 根目录继续修改 public_html/uc_server/avatar.php
1 | define('UC_API', strtolower(($_SERVER['HTTPS'] == 'on' ? 'https' : 'http').'://'.$_SERVER['HTTP_HOST'].substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], '/')))); |
修改为:
1 | define('UC_API', strtolower(($_SERVER['SERVER_PORT'] == 443 || $_SERVER['HTTPS'] == 'on' ? 'https' : 'http').'://'.$_SERVER['HTTP_HOST'].substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], '/')))); |
后台 Ucenter 通信使用 https 方式
若不更改亦可以,这一步可以忽略
进入 admin.php 后台,点击站长 - UCenter 设置 - UCenter 访问地址将 http 改为 https 其后将头像调用方式改为使用静态地址调用头像。
后台 Ucenter 无法通信
审查元素,观察 return error 然后去官方找到相应的解决方法。
修成 Discuz 文章 https
进入安装 DIscuz 根目录继续修改 public_html/source/function/function_core.php
于<font style="color:#F5222D;">$content = output_replace($content);</font>
代码下方处添加
<font style="color:#F5222D;">$content = str_replace('http://www.xxx.com','https://www.xxx.com',$content);</font>
如果你有二级目录请这样添加
<font style="color:#F5222D;">$content = preg_replace('http://(.*?)xxx.com','https://\1xxx.com',$content);</font>
2、X3.2 升级至最新 X3.4 总结
准备前置条件:
DiscuzX 程序版本:Discuz! X3.2 Release 20141225 DiscuzX
后台版本:UCenter 1.6.0 DiscuzX
最新版本下载地址:https://gitee.com/3dming/DiscuzL/attach_files
操作步骤:
1)备份数据库,导出转储 SQL 文件结构和数据;
2)备份服务端网站目录;
3)创建 old 新文件夹,除了 data , config , uc_client , uc_server 目录以外的文件夹均移动进入 old 新文件夹内,注意 old 文件夹为小写字母;
4)通过 ftp 上传最新的服务端文件,注意分清下载的最新版本编码对应服务器正在使用的编码;
5)关闭站点,关闭服务端 web 服务;
6)将上传完毕解压后的 upload 文件夹内所有文件复制并替换服务端网站目录。
7)上传 utility 目录中的 update.php 文件到 install 目录中,删除 install.php 文件,并确保 install/data 中的 sql 文件完整。
8)执行 https://yourwebsite/install/update.php 按步骤完成升级。
最后尝试访问网站是否有异常,使用管理员登录站点后台,更新缓存。步骤为:后台=>工具=>更新缓存,完成升级。
升级过程中遇到的问题:
1.如果选择“是”您的站点将恢复站点默认风格,则你原网站风格、SEO 和 logo 全部还原为原始模版风格,注意升级选择。
2.在升级后无法登录后台
先确定你的账号在数据库内是否为管理员或者被清空,如无问题再找到根目录下的 uc_server/model 目录里的 admin.php 文件,并搜索代码 <font style="color:#F5222D;">$this->cookie_status = 0;</font>
修改为 <font style="color:#F5222D;">$this->cookie_status = isset($_COOKIE['sid']) ? 1 : 0;</font>
即可。
3.在升级时候遇到错误 【SELECT skey FROM common_setting WHERE skey=’strongpw’ LIMIT 1】
遇到 SQL 问题可以尝试 SQL 语句执行一下,很明显可以确定到 1146 问题,没有该表。尝试 creat common_setting 表即可,遇到这个问题的,后续也可能会遇到 common_syscache 表缺少 和 common_member 缺失 realname 字段,这里建议核对一下。这里我创建字段时候,选择 varchar(25)
4.在升级的时候遇到错误【请手工执行以下升级语句 XXX】
遇到又是 SQL 问题,先确定是否 SQL 语句执行正常。然后判断逻辑,这里 update.php 其实是官方升级程序,通过改表的方式升级的一个 bug.多年未改,只干了改表的事和新建表的事,改完表后,原来不存在了,但程序里却在对该表进行查询操作,所以会报“表不存在”的错误,导致升级程序终止,不能继续升级。
解决方法,即注释 <font style="color:#F5222D;">if(!empty($oldcols[$key]))</font>
至 <font style="color:#F5222D;">... ADO PRIMARY KEY ...</font>
代码,刷新页面重新升级即可。
5.第一个步骤提示验证失败,无法进行升级
跳过第一个升级步骤,直接访问 https://yourwebsite/install/update.php?step=prepare 即可。
6.升级后发现许多地方乱码了
请核对字符编码为 UTF-8 简繁 还是 GBK
3、Discuz 开启 Redis
Windows 系统操作
参考 CentOS 操作步骤
CentOS 系统操作
1.查看 php 版本
1 | [root@VM_0_2_centos ~]# php -v |
2. 查看 php-redis 扩展包全名
<font style="color:#F5222D;">yum list | grep php56w*</font>
如果是其它版本就将修改“56”修改为其正确本版
3. 通过 yum 安装 redis 扩展
<font style="color:#F5222D;">yum -y install php56w-pecl-redis.x86_64</font>
4. 重启 httpd 服务
<font style="color:#F5222D;">service httpd restart</font>
5. Discuz 需要编译 Config/config_global.php 配置才可以开启,默认是不打开的。
<font style="color:#F5222D;">$_config['memory']['redis']['server'] = '127.0.0.1';</font>
4、Discuz 迁移数据至Flarum
参考以下方法
https://github.com/KeKe12030/DiscuzToFlarum
5、Discuz 迁移数据至XenForo
DZ 和 XF 均是 BB 代码,存在可迁移可能性