Discuz! X 安全之禁止用户非法访问后台

从dismall上看到的,原文在这里:

https://www.dismall.com/thread-9320-1-1.html

Discuz!默认的后台路径是 http://你的域名/admin.php

因此很多站长不希望后台直接暴露出来让一些不法用户尝试登陆后台,造成一些安全隐患;

隐藏后台路径一般有两种思路,第一种就是直接修改admin.php文件名称,但是这种方式,前后台要修改的文件比较多,包括所有第三方模版都要修改,而且还会造成有时候安装插件无法再使用问题;新一代黑客木马大都注意到修改admin.php名称的说。

另一种思路,就是对admin.php增加访问权限,这就是本文要讲的方法,具体操作如下:

三种修改方法按需要选择其中一种即可。

都是修改 admin.php文件

A. 必须在前台登录以后才能访问后台

在$discuz->init(); 下方加入代码

if(!$_G['uid']){
header('HTTP/1.1 404 Not Found');
header("status: 404 Not Found");
echo '404 Not Found';
exit;
}

 

B. 必须在前台登录且uid=1, 才可以访问后台

在$discuz->init();下方加入代码

if($_G['uid']!=1){
header('HTTP/1.1 404 Not Found');
header("status: 404 Not Found");
echo '404 Not Found';
exit;
}

C. 必须在前台登录了且uid在指定范围,才可以访问后台

在$discuz->init(); 下方加入代码

$uids=array(1,2,3,99);
if(in_array($_G['uid'],$uids)){
header('HTTP/1.1 404 Not Found');
header("status: 404 Not Found");
echo '404 Not Found';
exit;
}

修改完成后,非法直接访问后台的用户就直接报404错误了

Discuz开发 discuz 论坛注册,登录流程整理

discuz 论坛 用户注册流程
第一步:
/source/class/class_member.php: on_register注册入口
L602 左右
if(!$activation) {//不为空,说明用户已经注册过
//将用户注册到用户中心,调用第二步uc_user_register方法
$uid = uc_user_register(addslashes($username), $password, $email, $questionid, $answer, $_G[‘clientip’]);

第二步:
/uc_client/client.php: uc_user_register 调用将用户注册到用户中心的方法,调用第三步的onregister方法
第三步:
/uc_client/control/user.php: onregister 将用户注册到用中心,调用第四步add_user方法
第四步:
/uc_client/model/user.php:add_user 将用户注册到ucenter返回用户id
第五步:
/source/class/class_member.php:
L685行 左右,会把用户信息写到common_member表。注册结束
C::t(‘common_member’)->insert($uid, $username, $password, $email, $_G[‘clientip’], $groupinfo[‘groupid’], $init_arr);

discuz 论坛 登陆流程
第一步:
/source/class/class_member.php: on_login 登陆入口
87行左右,调用userlogin方法如下:
$result = userlogin($_GET[‘username’], $_GET[‘password’], $_GET[‘questionid’], $_GET[‘answer’], $this->setting[‘autoidselect’] ? ‘auto’ : $_GET[‘loginfield’], $_G[‘clientip’]);
第二步:
/source/function/function_member.php: logincheck
72行左右 调用 logincheck,如下:
if(!($_G[‘member_loginperm’] = logincheck($_GET[‘username’]))) {
showmessage(‘login_strike’);
}
第三步:
/source/function/function_member.php: userlogin 用户登陆查询相关表
第29行-40行左右会用调用uc_user_login方法
if($isuid == 3) {
if(!strcmp(dintval($username), $username) && getglobal(‘setting/uidlogin’)) {
$return[‘ucresult’] = uc_user_login($username, $password, 1, 1, $questionid, $answer, $ip);// uc_client/client.php
} elseif(isemail($username)) {
$return[‘ucresult’] = uc_user_login($username, $password, 2, 1, $questionid, $answer, $ip);// uc_client/client.php
}
if($return[‘ucresult’][0] <= 0 && $return[‘ucresult’][0] != -3) {
$return[‘ucresult’] = uc_user_login(addslashes($username), $password, 0, 1, $questionid, $answer, $ip);
}
} else {
$return[‘ucresult’] = uc_user_login(addslashes($username), $password, $isuid, 1, $questionid, $answer, $ip);
}

/uc_client/client.php: 包含uc_开头的全部方法,例uc_user_login
/uc_client/control/user.php: onlogin 根据条件判断登陆,114-120 判断查询条件查询出ucenter用户信息
/uc_client/model/user.php 包含有get_user_by_uid,get_user_by_username 等方法 第50行左右查询common_member表,如下:
$member = getuserbyuid($return[‘ucresult’][‘uid’], 1);

回到/source/class/class_member.php文件on_login方法

第95-106 行左右会根据条件$result[‘status’]==-1 ,写common_member表,并查询出写入信息
C::t(‘common_member’)->insert($uid, $result[‘ucresult’][‘username’], md5(random(10)), $result[‘ucresult’][’email’], $_G[‘clientip’], $groupid, $init_arr);
$result[‘member’] = getuserbyuid($uid);

————————————————————————————-
ps:以上所有方法都会先执行
/source/class/discuz/discuz_application.php: _init_user
所以如果要自己写checklogin 可以考虑从_init_user 方法入手

如果与自己的平台做bbs的打通。
注册可以考虑在第4步做操作,调用自己平台的注册接口。注册用户,并将用户id返回。写入到ucenter
/uc_client/model/user.php:add_user 方法内

登陆打通可以考虑在 第三步调用 uc_user_login 方法前,
1.调用自己平台接口查询用户相关信息
2.查询ucenter中用户是否存在
3.如果不存在insert一条数据
4.common_member可以写也可以不写 ,如此时不写 $result[‘status’]==-1 会在class_member 95-106 行左右写入

如果在自己平台处于登陆状态,在discuz 也为登陆状态,则可以考虑从_init_user 方法入手。做登录判断

Discuz 3.2, 3.3, 3.4 直接利用SQL创建新用户

我们的网站要和Discuz整合到一起,有个新用户同步的需求,网络上很多的做法是用 UCenter的接口来做,反正最后都是插入SQL,笔者使用了直接操作数据库的方式,把操作的表和SQL整理了下,后面如果有时间做个SSO就省事了

版本:dz 3.2版本 ucenter1.6版本
目标:插入普通用户,最小可用就行了,可以登录

SQL记录:

注意:表名称前缀根据配置可能不同, 一共有8张表

SELECT *FROM pre_ucenter_members;
-- UCenter用户数据表 uid, username, password, email, regip(默认写一个值), regdate(时间戳), salt(随机6位字母数字)

SELECT *FROM pre_ucenter_memberfields;
-- UCenter用户扩展信息数据表 插入 uid

SELECT *FROM pre_common_member;
-- 主用户表 插入的字段 email, username, password, emailstatus, regdate(时间戳)
-- 得到uid再插入其它表

SELECT *FROM pre_common_member_count;
-- 用户数据统计 各种积分,动态等 插入 uid

SELECT *FROM pre_common_member_field_forum;
-- 用户论坛设置数据表 插入 uid

SELECT *FROM pre_common_member_field_home;
-- 用户家园设置数据表 插入 uid

SELECT *FROM pre_common_member_profile;
-- 用户个人资料数据表 插入 uid

SELECT *FROM pre_common_member_status;
-- 用户状态数据表 插入 uid


-- 下面是插入一个普通用户的测试, 这里根据id自增,自己算出了uid,便于sql书写 
-- lzz, 邮箱 [email protected], 密码 xyz2541 
-- 需要计算的密码 pre_common_member 密码为 md5(password) 2cf5c897f58ca21cac9bec93f46f6f53
-- pre_ucenter_members salt yyy111 密码为 md5(md5(password)+salt) 4fab791987738fce5f11504a0fe2a342
-- MYSQL mode 设置的比较严格,所以很多默认值要自己加上。。

INSERT INTO pre_ucenter_members SET uid=7, username='lzz', `password`='4fab791987738fce5f11504a0fe2a342', email='[email protected]', regip='127.0.0.1', regdate=UNIX_TIMESTAMP(), salt='yyy111';

INSERT INTO pre_ucenter_memberfields SET uid=7, blacklist='';

INSERT INTO pre_common_member SET uid=7, username='lzz', `password`='2cf5c897f58ca21cac9bec93f46f6f53', email='[email protected]', emailstatus=1, regdate=UNIX_TIMESTAMP();

INSERT INTO pre_common_member_count SET uid=7;

INSERT INTO pre_common_member_field_forum SET uid=7, `medals`='', `sightml`='', `groupterms`='', `groups`='';

INSERT INTO pre_common_member_field_home SET uid=7, `spacecss`='', `blockposition`='', 
`recentnote`='', `spacenote`='', `privacy`='', `feedfriend`='', `acceptemail`='', `magicgift`='', `stickblogs`='';

INSERT INTO pre_common_member_profile SET uid=7, `bio`='', `interest`='', `field1`='', `field2`='',
`field3`='', `field4`='', `field5`='', `field6`='', `field7`='', `field8`='';

INSERT INTO pre_common_member_status SET uid=7;

在Discuz的数据库中插入到数据库之后,web端就能登录了

Ucenter中的用户批量导入到discuz中的办法

这个代码是搜索到的,主要看一下需要在数据库里更新哪些表格.

将下面的代码复制到一个php中,并在浏览器中输入地址执行:

<?php
$dbserver =’localhost’; //此处改成数据库服务器地址
$dbuser =’root’;//此处写数据库用户名
$dbpwd =’1234′;//数据库密码
$dbname =’disucz’;//数据库名称
$charset =’gbk’;//此处写字符集gbk或者utf8
$uc_pre =’pre_ucenter_’;//UC表前缀
$dx_pre =’pre_’;//Discuz! X2表前缀
//此行开始向下不要改动
set_time_limit(0); //0为无限制
$connect=mysql_connect($dbserver,$dbuser,$dbpwd) or die(“无法连接数据库”);
@mysql_select_db($dbname,$connect);
mysql_query(“set names $charset”);
$query = mysql_query(“SELECT * FROM `{$uc_pre}members` WHERE `uid` not in(select `uid` from `{$dx_pre}common_member`) “,$connect);
while($user = mysql_fetch_array($query)) {
$password=$user[password];
mysql_query(” replace INTO `{$dx_pre}common_member` (uid,username,password,adminid,groupid,regdate,email) VALUES (‘$user[uid]’, ‘$user[username]’, ‘$password’,’0′,’10’,’$user[regdate]’,’$user[email]’) “);
mysql_query(” replace INTO `{$dx_pre}common_member_field_forum` (uid) VALUES (‘$user[uid]’)”);
mysql_query(” replace INTO `{$dx_pre}common_member_field_home` (uid) VALUES (‘$user[uid]’)”);
mysql_query(” replace INTO `{$dx_pre}common_member_count` (uid) VALUES (‘$user[uid]’)”);
mysql_query(” replace INTO `{$dx_pre}common_member_profile` (uid) VALUES (‘$user[uid]’)”);
mysql_query(” replace INTO `{$dx_pre}common_member_status` (uid) VALUES (‘$user[uid]’)”);
}
echo “已从UC批量导入激活成功”;
?>

注释: 连接到数据库后,PHP会比对UC和DZ用户表的数据,发现不存在于DZ但是存在于UC的用户,就会把用户导入到DZ,但是这一注册不会设置其他内容,比如用户填写的详细信息,由于以前是存储在DZ数据库中,所以还是丢失了

这样子用户已经全部导入,用户数也恢复了正常

下一步,将用户的邮箱验证全部设置为已验证

数据库执行:

update pre_common_menber set emailstatus="1";

注释:这是更新数据库中emailstatus字段,1为验证 pre记得改为你的论坛的前缀

 

 

DISCUZ数据库表说明 – 清理时事半功倍

一、非异常变动与站点管理下,请勿清理。毕竟论坛发展壮大运营起来积分信息还是比较重要的,切记清理请慎重(表前缀默认为:pre_)
pre_common_credit_log 积分日志表
pre_common_credit_log_field 积分日志详情
pre_common_credit_rule_log 积分规则日志表
二、以下表在论坛本身的展示内容来说是没有任何影响的,但是会在灌水、恶意注册或者日常操作中积累大量的垃圾信息,都是可以做日常清理的表单(表前缀默认为:pre_)
pre_common_failedlogin 失败登录表
pre_common_grouppm 群发短消息表
pre_common_invite 邀请表
pre_common_mailqueue 邮件队列表
pre_common_member_action_log 用户操作日志表
pre_common_member_newprompt 用户新提醒数量表
pre_common_member_validate 用户审核表
pre_common_visit 用户访问日志表
pre_forum_post_moderate 帖子审核数据表
pre_forum_thread_moderate 主题审核数据表
pre_home_blog_moderate 日志审核数据表
pre_home_comment_moderate 家园评论审核数据表
pre_home_doing_moderate 记录审核数据表
pre_home_pic_moderate 图片审核数据表
pre_home_share_moderate 分享审核数据表
pre_portal_article_moderate 文章审核数据表
pre_portal_comment_moderate 文章/专题评论审核数据表
pre_home_notification 通知表
pre_security_evilpost
pre_security_eviluser
pre_security_failedlog 防水墙积累的垃圾信息表

DISCUZ 各数据库表作用

最近准备二次开发一下discuz,discuz 数据库各表的作用很有意义

pre_common_addon 插件扩展中心服务商表
pre_common_admincp_cmenu 后台管理面板,自定义常用菜单表
pre_common_admincp_group 后台团队职务名称表
pre_common_admincp_member 后台管理员成员表
pre_common_admincp_perm 后台团队职务权限分配表
pre_common_admincp_session 后台管理面板登录session表
pre_common_admingroup 后台管理组权限分配表
pre_common_adminnote 管理团队留言表
pre_common_advertisement 广告位管理表
pre_common_advertisement_custom 广告位自定义名称
pre_common_banned 禁止IP表
pre_common_block DIY 模块管理表
pre_common_block_favorite DIY模块收藏表:门户管理的模块管理里使用
pre_common_block_item DIY模块属性表
pre_common_block_item_data DIY模块数据表
pre_common_block_permission DIY模块权限表
pre_common_block_pic DIY模块图片表
pre_common_block_style DIY模块风格表
pre_common_block_xml 模块XML扩展类数据表
pre_common_cache 公用缓存表
pre_common_card 充值卡表
pre_common_connect_guest QQ互联游客表
pre_common_credit_log 积分记录表
pre_common_credit_log_field 积分记录详细信息 3.0版本增加
pre_common_credit_rule 积分策略表
pre_common_credit_rule_log 积分策略生效记录
pre_common_credit_rule_log_field 积分策略生效记录扩展
pre_common_cron 计划任务表
pre_common_devicetoken 设备数据表 3.0增加
pre_common_district 地区列表
pre_common_diy_data DIY 模板页数据存档表
pre_common_domain 应用域名分配表
pre_common_failedlogin 普通登录失败日志表
pre_common_friendlink 友情链接表
pre_common_grouppm 群发短信列表内容
pre_common_invite 邀请码表
pre_common_magic 道具表
pre_common_magiclog 道具日志表
pre_common_mailcron 邮件计划任务表
pre_common_mailqueue 邮件发送队列表
pre_common_member 用户表,密码是随机生成记录,实际记录在UCenter
pre_common_member_action_log 用户表操作日志表
pre_common_member_connect 用户QQ互联表
pre_common_member_count 用户数据统计表
pre_common_member_crime 用户惩罚操作表
pre_common_member_field_forum 用户论坛设置表
pre_common_member_field_home 用户家园设置表
pre_common_member_forum_buylog 论坛购买日志
pre_common_member_grouppm 用户群发消息状态表
pre_common_member_log 用户操作日志表
pre_common_member_magic 用户道具配置表
pre_common_member_medal 用户勋章表
pre_common_member_newprompt 用户新提醒表
pre_common_member_profile 用户个人信息表
pre_common_member_profile_setting 用户个人信息设置表
pre_common_member_security 个人信息修改审核
pre_common_member_stat_field 用户状态字段表
pre_common_member_status 用户状态表
pre_common_member_validate 用户认证审核
pre_common_member_verify 用户认证设置
pre_common_member_verify_info 用户认证信息
pre_common_moderate 审核数据表
pre_common_myapp 漫游应用表
pre_common_myapp_count 漫游应用数据统计表
pre_common_myinvite 漫游邀请表
pre_common_mytask 用户任务表
pre_common_nav 导航菜单表
pre_common_onlinetime 在线时间表
pre_common_optimizer 优化表
pre_common_patch 漏洞补丁表
pre_common_plugin 插件表
pre_common_pluginvar 插件参数表
pre_common_process 高速缓存表
pre_common_regip 注册IP表,防重复注册 最多五次
pre_common_relatedlink 相关链接
pre_common_report 举报表
pre_common_searchindex 搜索索引表
pre_common_secquestion 密码问答问题表
pre_common_session 用户登录session表
pre_common_setting 网站设置参数表
pre_common_smiley 表情表
pre_common_sphinxcounter sphinx搜索程序用表
pre_common_stat 统计表
pre_common_statuser 统计用户表
pre_common_style 风格表
pre_common_stylevar 风格参数表
pre_common_syscache 系统参数缓存表
pre_common_tag tag表
pre_common_tagitem tag内容表
pre_common_task 用户任务表
pre_common_taskvar 任务参数表
pre_common_template 模板表
pre_common_template_block 模板模块表
pre_common_template_permission 模板权限表
pre_common_uin_black UIN 黑名单
pre_common_usergroup 用户组表
pre_common_usergroup_field 用户组权限表
pre_common_usergroup_field 用户组权限表
pre_common_visit 访问表
pre_common_word_type 敏感词类型表
pre_connect_disktask 磁盘任务
pre_connect_feedlog Connect feed日志表
pre_connect_memberbindlog Connect 用户绑定/解绑记录表
pre_connect_postfeedlog Connect 回帖帖feed日志
pre_connect_tthreadlog Connect 发帖帖帖feed日志
pre_connect_tlog 微博日志表
pre_forum_access 论坛访问权限单独设置表
pre_forum_activity 论坛活动表
pre_forum_activityapply 论坛活动报名表
pre_forum_announcement 论坛公告表
pre_forum_attachment 1.5 = 论坛附件表, x2 = 附件索引表
pre_forum_attachment_0 附件表(x2),用了分表即表名最后一位数字 = 附件tid的最后一位
pre_forum_attachmentfield 论坛附件扩展表(x2以去除)
pre_forum_attachment_exif 论坛附件exif信息表
pre_forum_attachment_unused 未使用的附件表
pre_forum_attachtype 论坛附件类型表
pre_forum_bbcode 论坛UBBCODE表
pre_forum_collection 淘帖专辑表
pre_forum_collectioncomment 淘帖评论表
pre_forum_collectionfollow 淘帖订阅表
pre_forum_collectioninvite 邀请管理淘专辑表
pre_forum_collectionrelated 淘帖主题被收入专辑表
pre_forum_collectionteamworker 淘帖合作编辑表
pre_forum_collectionthread 淘帖包含主题表
pre_forum_creditslog 论坛积分日志表
pre_forum_debate 辩论主题表
pre_forum_debatepost 辩论帖子表
pre_forum_faq 常见问答表
pre_forum_filter_post 过滤回帖表
pre_forum_forum 论坛板块表
pre_forum_forumfield 论坛板块设置表
pre_forum_forumrecommend 版块推荐帖表
pre_forum_forum_threadtable 主帖表
pre_forum_groupcreditslog 群组积分日志
pre_forum_groupfield 群组表
pre_forum_groupinvite 群组邀请表
pre_forum_grouplevel 群组级别表
pre_forum_groupuser 群组用户表
pre_forum_hotreply_member 火热回复用户表
pre_forum_hotreply_number 火热回复数字表
pre_forum_imagetype 图像类型表
pre_forum_medal 勋章表
pre_forum_medallog 勋章发放日志表
pre_forum_memberrecommend 用户推荐表
pre_forum_moderator 版主表
pre_forum_modwork 版主工作表
pre_forum_newthread 论坛新主题表
pre_forum_onlinelist 论坛在线列表
pre_forum_order 论坛订单表
pre_forum_poll 论坛投票帖表
pre_forum_polloption 论坛投票选项表
pre_forum_polloption_image 投票选项图片表
pre_forum_pollvoter 论坛投票用户表
pre_forum_post 论坛帖子表
pre_forum_postcomment 帖子评论表
pre_forum_postlog 回复日志表
pre_forum_postposition 回复楼层表
pre_forum_poststick 回复置顶到主题帖表
pre_forum_post_moderate 论坛回复管理表
pre_forum_post_location 论坛回复地理信息位置表
pre_forum_post_tableid 分表后回复帖的ID
pre_forum_postcache 论坛回复缓存表
pre_forum_postcomment 论坛回复点评表
pre_forum_postlog 论坛回复日志表
pre_forum_poststick 论坛回复插入
pre_forum_promotion 网站推广表
pre_forum_ratelog 打分日志表
pre_forum_relatedthread 相关帖子表
pre_forum_rsscache RSS缓存表
pre_forum_sofa 论坛沙发表
pre_forum_spacecache 空间信息缓存表
pre_forum_statlog 论坛统计日志
pre_forum_thread 论坛主题表
pre_forum_threadpreview 主帖预览表
pre_forum_threadprofile 帖子信息表
pre_forum_threadprofile_group 帖子信息组表
pre_forum_threadcalendar 帖子日历表
pre_forum_thread_moderate 主题管理表
pre_forum_threadaddviews 帖子查看数字表
pre_forum_threadclass 帖子分类表
pre_forum_threadclosed 帖子关闭表
pre_forum_threaddisablepos 帖子取消表
pre_forum_threadhot 火热主题表
pre_forum_threadimage 主题图片表
pre_forum_threadlog 主题日志表
pre_forum_threadmod 主题管理记录表
pre_forum_threadtype 主题分类信息表
pre_forum_trade 商品帖数据表
pre_forum_tradecomment 商品帖评论
pre_forum_tradelog 商品帖交易日志
pre_forum_typeoption 类型选项
pre_forum_typeoptionvar 类型选项参数
pre_forum_typevar 类型参数
pre_forum_warning 警告表
pre_home_album 家园相册表
pre_home_album_category 家园相册分类表
pre_home_appcreditlog 家园应用积分日志
pre_home_blacklist 家园黑名单表
pre_home_blog 家园博客表
pre_home_blogfield 家园博客内容表
pre_home_blog_category 家园博客分类表
pre_home_blog_moderate 家园日志管理表
pre_home_class 日志个人分类表
pre_home_click 对日志和图片表态动作
pre_home_clickuser 静态用户表
pre_home_comment 家园评论表
pre_home_comment_moderate 家园评论留言管理表
pre_home_docomment 家园记录回复表
pre_home_doing 家园记录表
pre_home_doing_moderate 家园记录管理表
pre_home_favorite 家园收藏表
pre_home_feed 家园动态表
pre_home_feed_app 漫游APP动态表
pre_home_follow 家园收听表
pre_home_follow_feed 收听FEED表
pre_home_follow_feed_archiver 收听归档表
pre_home_friend 家园好友表
pre_home_friendlog 好友日志表
pre_home_friend_request 好友请求表
pre_home_notification 通知消息
pre_home_pic 家园图片表
pre_home_pic_moderate 家园日志管理表
pre_home_picfield 相册相关信息表
pre_home_poke 打招呼表
pre_home_pokearchive 打招呼归档
pre_home_share 分享表
pre_home_share_moderate 家园分享管理表
pre_home_show 上榜宣言
pre_home_specialuser 明星会员表
pre_home_userapp 漫游APP
pre_home_userappfield 漫游APP
pre_home_userapp_stat 漫游APP统计
pre_home_viewlog 日志和用户访问记录表
pre_home_visitor 最近访客记录表
pre_home_follow 广播收听表
pre_home_follow_feed 广播表
pre_home_follow_feed_archiver 广播归档表
pre_mobile_setting 手机设置表
pre_portal_article_content 文章内容表
pre_portal_article_count 文章计数表
pre_portal_article_moderate 门户文章管理表

Discuz 修改数据库密码

Discuz 迁移到别的服务器的时候,mysql 的密码一般是不一样,一般需要改三个地方的配置文件:

  1. ./config/config_global.php
  2. ./config/config_ucenter.php
  3. ./uc_server/data/config.inc.php

很多时候就是忘记修改第三个位置,这个是用户登录验证的地方,如果忘记修改,用户会无法登录

DiscuzX 固定顶部格子广告的列数

DiscuzX的顶部的格式广告的列数,是再3,4,5之间自动变化的.

具体的代码位于:

source/class/adv/adv_text.php, 从97行开始:

 
$advcount = count($adids);
if($advcount > 5) {
		$minfillpercent = 0;
		for($cols = 5; $cols >= 5; $cols--) {
			if(($remainder = $advcount % $cols) == 0) {
				$advcols = $cols;
			break;
		} elseif($remainder / $cols > $minfillpercent)  {
			$minfillpercent = $remainder / $cols;
			$advcols = $cols;
		}
	}
} else {
	$advcols = $advcount;
	}
因此我们可以看到格子广告的列数再3,4,5之间动态变化,如果要固定列数,只需要把for循环的两个5改成4或者3就可以了

discuz x3.2升级到x3.4并且开启全站SSL

discuz X从3.2升级到3.4很简单,直接按照官网的文档就可以了,主要问题升级上来的网站开启SSL会出现某些问题

首先,开启SSL的话,需要再后台把能改成https的地方全部改成https,这样对于新站就是全站SSL了

其次,对于升级上来的网站,会发现楼层点评中的头像链接仍然是http,这是因为点评头像的链接会直接缓存与pre_forum_postcache表中,我们目前只能在输出的时候对http://进行替换(在数据库中直接把http换成https, 会造成点评不显示,具体的原因还需要查看源代码才清楚)

打开模板 view_node_body.htm, 查找$comment [ avatar ], (把空格去掉)替换为:

{eval echo str_replace("http://","https://",$comment[ avatar ]);}

把avatar两侧的空格去掉