Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

干扰码不可见的问题检查步骤与discuzcode分析。

[复制链接]
rikioy 发表于 2011-8-31 09:33:11 | 显示全部楼层 |阅读模式
最近在bug区有好几位会员反映设置了干扰码但是却没有出现干扰码,这个怀疑是BUG。那么我们就来看看如何检查这个是否是bug。
在这里假定我们对discuzx结构不熟悉,该如何检查呢?
首先设置了干扰码,这个最终会存进数据库,那我们看看是存到了那里?
通过discuzx数据字典 http://dev.discuz.org/wiki/index ... E%E5%AD%97%E5%85%B8
搜索 干扰码我们看到
  1. jammer tinyint(1) NOT NULL default '0' COMMENT '是否启用干扰码'
复制代码
在pre_forum_forum表中

然后我们再寻找看帖中那块用到了这个设置。看帖的代码是在 forum_viewthread.php 中。如果你不知道是在这里。那么用文件搜索 关键字 jammer 结果中也能猜测到大概是在这个模块


关键的处理是在这个代码处
  1. $post['message'] = discuzcode($post['message'], $post['smileyoff'], $post['bbcodeoff'], $post['htmlon'] & 1, $_G['forum']['allowsmilies'], $_G['forum']['allowbbcode'], ($_G['forum']['allowimgcode'] && $_G['setting']['showimages'] ? 1 : 0), $_G['forum']['allowhtml'], ($_G['forum']['jammer'] && $post['authorid'] != $_G['uid'] ? 1 : 0), 0, $post['authorid'], $_G['cache']['usergroups'][$post['groupid']]['allowmediacode'] && $_G['forum']['allowmediacode'], $post['pid'], $_G['setting']['lazyload']);
复制代码
这个是一整行哦。看起来多,其实就是一个调用函数返回值给$post['message']的简单语句
$post['message'] = discuzcode(参数很多,很乱)整理一下
  1. 1、$post['message']
  2. 2、$post['smileyoff']
  3. 3、$post['bbcodeoff']
  4. 4、$post['htmlon'] & 1
  5. 5、$_G['forum']['allowsmilies']
  6. 6、$_G['forum']['allowbbcode']
  7. 7、($_G['forum']['allowimgcode'] && $_G['setting']['showimages'] ? 1 : 0)
  8. 8、$_G['forum']['allowhtml']
  9. 9、($_G['forum']['jammer'] && $post['authorid'] != $_G['uid'] ? 1 : 0)
  10. 10、0
  11. 11、$post['authorid']
  12. 12、$_G['cache']['usergroups'][$post['groupid']]['allowmediacode'] && $_G['forum']['allowmediacode']
  13. 13、$post['pid']
  14. 14、$_G['setting']['lazyload']
复制代码
一共14个参数。那我们再看discuzcode函数,如果不知道函数定义的位置,依旧可以文件搜索。function discuzcode
在 function_discuzcode.php 中看到了函数的定义。
找到处理干扰码的语句
  1. if($jammer) {
  2.                 $message = preg_replace("/\r\n|\n|\r/e", "jammer()", $message);
  3.         }
复制代码
看到 如果 $jammer 为真。那么就进行处理。那么 $jammer 是什么呢 就是我们传入的第九个参数
  1. ($_G['forum']['jammer'] && $post['authorid'] != $_G['uid'] ? 1 : 0)
复制代码
其实在刚才整理参数的这一步,我们就能判断出为什么看不到干扰码了。传入给 $jammer 的参数是 。如果$_G['forum']['jammer']  为真,并且 $post['authorid'] != $_G['uid'] 为真,传入1。也就是给$jammer 赋真值。就处理干扰码。
  1. 用白话描述就是 如果这个版块开启了干扰码,并且 发帖人不等于看贴人,就输出干扰码。
复制代码
好了。现在明白什么意思了吧。看不到干扰码的朋友应该是自己发帖看自己的贴,所以不输出干扰码
到此结束!
本文的后部分内容。。。容我慢慢写吧。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
64243354 发表于 2011-8-31 10:14:04 | 显示全部楼层
支持了 再看~
回复

使用道具 举报

wuxinwuxing 发表于 2011-8-31 16:27:43 | 显示全部楼层
{:soso__11772749427041641806_3:}
回复

使用道具 举报

51xiangxun 发表于 2011-8-31 17:13:31 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

liujun1990 发表于 2011-8-31 20:32:29 | 显示全部楼层
学习一下经验了!
回复

使用道具 举报

dwin408 发表于 2011-9-26 22:51:48 | 显示全部楼层
DZ的function参数真多,谢谢楼主的指导
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-12-4 16:48 , Processed in 0.026755 second(s), 6 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表