Discuz X3.5版本开发中 功能简介

overme7个月前 (10-17)网页设计516
总体来说DiscuzX3.5是Discuz回归之后变动较大的一个版本,多数变化都是程序底层和后台的,前端用户并不能感受到太多。前端变化变化明显的是,导航栏和发帖按钮更加扁平化了,手机端用于体验提升了。
据库相关变更
3.5版本,支持InnoDB与MyISAM两种数据库引擎,在两种引擎下数据库都不再支持utf8编码,转而支持utf8mb4编码。

1.1 数据库表结构的变更:
参考 scheme-change-without-data-loss.sql

修改了所有的IP地址,改为varchar(45)类型;
在所有记录IP地址的地方,增加了端口号的记录;
在pre_common_banned表中,增加了upperip和lowerip两个VARBINARY(16)类型的字段,用于记录IP地址的封禁范围最大值和最小
将部分字段改”大“,比如INT改为BIGINT, TEXT改为MEDIUMTEXT等
为支持IPv6,去掉了所有IP1/IP2/IP3/IP4的字段定义,参考scheme-change-drop-columns.sql
1.2 为支持InnoDB相关的变更
对于InnoDB数据库引擎,还会做如下变更,参考 scheme-change-innodb.sql

为支持InnoDB,在表pre_common_member_grouppm中增加了一个索引
为支持InnoDB,在表pre_forum_post中,取消了position的auto_increment属性
在配置文件中,引入了一个新的相关配置项,这个配置项要正确设置。尤其对于升级用户,否则会导致发帖功能不正常。

/*
* 数据库引擎,根据自己的数据库引擎进行设置,3.5之后默认为innodb,之前为myisam
* 对于从3.4升级到3.5,并且没有转换数据库引擎的用户,在此设置为myisam
*/
$_config[‘db’][‘common’][‘engine’] = ‘innodb’;
1.3 为支持utf8mb4相关的变更
对于MyISAM引擎,由于1000个字节的索引长度限制,因此要对一些索引做重新定义,参考 scheme-change-myisam-utf8mb4.sql

无论是InnoDB还是MyISAM,所有的表都使用utf8mb4编码与utf8mb4_unicode_ci,参考 scheme-change-charset.sql

2. IP相关变更
在3.5版本中,为了支持IPv6,做了以下变更

2.1 IP地址库
系统现在支持多个地址库,通过配置文件中的以下配置项进行选择:

$_config[‘ipdb’][‘setting’][‘fullstack’] = ”;        // 系统使用的全栈IP库,优先级最高
$_config[‘ipdb’][‘setting’][‘default’] = ”;        // 系统使用的默认IP库,优先级最低
$_config[‘ipdb’][‘setting’][‘ipv4’] = ‘tiny’;        // 系统使用的默认IPv4库,留空为使用默认库
$_config[‘ipdb’][‘setting’][‘ipv6’] = ‘v6wry’; // 系统使用的默认IPv6库,留空为使用默认库
地址库对应的class为 ip_<地址库名称> ,位于 source/class/ip 下面。系统会根据配置自动加载相应的class,相应的class也可以有自己的配置项,其规则为:

* $_config[‘ipdb’]下除setting外均可用作自定义扩展IP库设置选项,也欢迎大家PR自己的扩展IP库。
* 扩展IP库的设置,请使用格式:
*                 $_config[‘ipdb’][‘扩展ip库名称’][‘设置项名称’] = ‘值’;
* 比如:
*                 $_config[‘ipdb’][‘redis_ip’][‘server’] = ‘172.16.1.8’;
系统现在内置一个IPv4库,一个IPv6库

2.2 IP封禁
现在IP地址封禁,不再使用 * 作为通配符,而是使用子网掩码(CIDR)的方式来指定要封禁的地址范围。

IP封禁的配置,现在保存在pre_common_banned表中,每次用户访问的时候,都会触发检查。现在的检查效率较高,每次只会产生一个带索引的SQL查询(基于VARBINARY类型的大小比较)。对于一般的站点性能不会带来问题。另外可以启用Redis缓存,来进一步提高性能。另外还有一个配置项可关闭此功能,使用外部的防火墙等来进行IP封禁管理:

$_config[‘security’][‘useipban’] = 1; // 是否开启允许/禁止IP功能,高负载站点可以将此功能疏解至HTTP Server/CDN/SLB/WAF上,降低服务器压力
2.3 IP地址获取
IP地址获取,现在默认只信任REMOTE_ADDR,其它的因为太容易仿造,默认禁止。获取的方式也可以扩展,在配置文件中增加了以下配置项

/**
* IP获取扩展
* 考虑到不同的CDN服务供应商提供的判断CDN源IP的策略不同,您可以定义自己服务供应商的IP获取扩展。
* 为空为使用默认体系,非空情况下会自动调用source/class/ip/getter_值.php内的get方法获取IP地址。
* 系统提供dnslist(IP反解析域名白名单)、serverlist(IP地址白名单,支持CIDR)、header扩展,具体请参考扩展文件。
* 性能提示:自带的两款工具由于依赖RDNS、CIDR判定等操作,对系统效率有较大影响,建议大流量站点使用HTTP Server
* 或CDN/SLB/WAF上的IP黑白名单等逻辑实现CDN IP地址白名单,随后使用header扩展指定服务商提供的IP头的方式实现。
* 安全提示:由于UCenter、UC_Client独立性及扩展性原因,您需要单独修改相关文件的相关业务逻辑,从而实现此类功能。
* $_config[‘ipgetter’]下除setting外均可用作自定义IP获取模型设置选项,也欢迎大家PR自己的扩展IP获取模型。
* 扩展IP获取模型的设置,请使用格式:
*                 $_config[‘ipgetter’][‘IP获取扩展名称’][‘设置项名称’] = ‘值’;
* 比如:
*                 $_config[‘ipgetter’][‘onlinechk’][‘server’] = ‘100.64.10.24’;
*/
$_config[‘ipgetter’][‘setting’] = ”;
$_config[‘ipgetter’][‘header’][‘header’] = ‘HTTP_X_FORWARDED_FOR’;
$_config[‘ipgetter’][‘iplist’][‘header’] = ‘HTTP_X_FORWARDED_FOR’;
$_config[‘ipgetter’][‘iplist’][‘list’][‘0’] = ‘127.0.0.1’;
$_config[‘ipgetter’][‘dnslist’][‘header’] = ‘HTTP_X_FORWARDED_FOR’;
$_config[‘ipgetter’][‘dnslist’][‘list’][‘0’] = ‘comsenz.com’;
3. 缓存
3.5非常大的增强了对Redis缓存的支持,在使用了Redis的情况下,完全消除了对内存表的使用。包括:

所有的原session内存表相关的功能,全部由Redis实现
setting不再一次性加载,而是分批按需加载
对IP封禁的检测结果进行缓存
推荐所有的站配置并启用Redis缓存。

由于memcached的功能限制,以上的增强对memcached无效。

提示:由于 PHP 认为实现了 ArrayAccess 接口的对象并非完全等同于数组,因此原有依赖 array_key_exists 的插件或二次开发站点应取消对其的依赖。

4. 支持包括论坛在内在所有功能开关
3.5现在支持几乎所有功能的开关,管理员甚至可以关闭论坛,只使用门户。相关的修改请点击 PR291

由于X3.5版本还处于开发阶段,因此官方提示“强烈建议没有技术能力的用户不要在非测试环境使用3.5!!!
在生产环境盲目使用及更新Discuz! X3.5(开发中版本)可能造成
– 数据库结构错误造成数据丢失
– 部分功能故障导致网站无法运行
– 漏洞造成服务器遭到入侵”

Discuz X3.5手机版预览

以下链接,可以查看并下载Discuz 每日构建内容及版本:
https://www.discuz.net/daily/

如果要查看Discuz X3.5详细变更内容及反馈不合理事项和下载:

https://gitee.com/Discuz/DiscuzX/tree/v3.5/

相关文章

Discuz关闭前台插件的更新提示教程

Discuz论坛系统,管理员每次登录论坛,遇到后台有没有更新的应用时,都会出现更新提醒,而且关了还会继续弹出。如下图所示,后台没有暂停更新提醒的选项,用户体验不是很好: 找到文件source/m...

Discuz主题链接地址URL显示完全的修改教程

登陆FTP,打开 source/function/function_discuzcode.php 下载到本地,用代码编辑器编辑 搜索 如下代码 $length = 65; if(strle...

Discuz使用电脑访问discuz手机版或触屏版教程

一、discuz电脑无法访问标准手机版的方法: 现在需要修改2个文件,即可用电脑浏览discuz的手机版本: 1、文件./source/function/function_core.php 查找...


		Discuz图片水印设置方法教程

Discuz图片水印设置方法教程

发布图片时,为了防止侵权盗用,或是为了宣传网址引流,需要添加在图片上添加水印。 在此分享Discuz系统图片水印设置方法: Discuz论坛的水印设置很简单,使用制作的水印图片覆盖系统水印地址,然...

discuz帖子列表页 帖子预览 相关模板

帖子列表页的帖子预览展示用的模板是/template/default/forum/viewthread_preview.htm,展示出来的楼层模板是同目录的viewthread_preview_n...


		Discuz网站SEO优化,archiver功能开启还是关闭

Discuz网站SEO优化,archiver功能开启还是关闭

部分使用Discuz的朋友,认为静态链接利于搜索引擎爬虫抓取,因此开启了archiver功能。 Discuz archiver功能缺点:页面中的keywords,description都是相同的,...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。