最近在bug区有好几位会员反映设置了干扰码但是却没有出现干扰码,这个怀疑是BUG。那么我们就来看看如何检查这个是否是bug。
在这里假定我们对discuzx结构不熟悉,该如何检查呢?
首先设置了干扰码,这个最终会存进数据库,那我们看看是存到了那里?
通过discuzx数据字典 http://dev.discuz.org/wiki/index.php?title=Discuz%E6%95%B0%E6%8D%AE%E5%AD%97%E5%85%B8
搜索 干扰码我们看到
- jammer tinyint(1) NOT NULL default '0' COMMENT '是否启用干扰码'
复制代码
在pre_forum_forum表中
然后我们再寻找看帖中那块用到了这个设置。看帖的代码是在 forum_viewthread.php 中。如果你不知道是在这里。那么用文件搜索 关键字 jammer 结果中也能猜测到大概是在这个模块
关键的处理是在这个代码处- $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、$post['message']
- 2、$post['smileyoff']
- 3、$post['bbcodeoff']
- 4、$post['htmlon'] & 1
- 5、$_G['forum']['allowsmilies']
- 6、$_G['forum']['allowbbcode']
- 7、($_G['forum']['allowimgcode'] && $_G['setting']['showimages'] ? 1 : 0)
- 8、$_G['forum']['allowhtml']
- 9、($_G['forum']['jammer'] && $post['authorid'] != $_G['uid'] ? 1 : 0)
- 10、0
- 11、$post['authorid']
- 12、$_G['cache']['usergroups'][$post['groupid']]['allowmediacode'] && $_G['forum']['allowmediacode']
- 13、$post['pid']
- 14、$_G['setting']['lazyload']
复制代码 一共14个参数。那我们再看discuzcode函数,如果不知道函数定义的位置,依旧可以文件搜索。function discuzcode
在 function_discuzcode.php 中看到了函数的定义。
找到处理干扰码的语句
- if($jammer) {
- $message = preg_replace("/\r\n|\n|\r/e", "jammer()", $message);
- }
复制代码
看到 如果 $jammer 为真。那么就进行处理。那么 $jammer 是什么呢 就是我们传入的第九个参数- ($_G['forum']['jammer'] && $post['authorid'] != $_G['uid'] ? 1 : 0)
复制代码 其实在刚才整理参数的这一步,我们就能判断出为什么看不到干扰码了。传入给 $jammer 的参数是 。如果$_G['forum']['jammer'] 为真,并且 $post['authorid'] != $_G['uid'] 为真,传入1。也就是给$jammer 赋真值。就处理干扰码。
- 用白话描述就是 如果这个版块开启了干扰码,并且 发帖人不等于看贴人,就输出干扰码。
复制代码 好了。现在明白什么意思了吧。看不到干扰码的朋友应该是自己发帖看自己的贴,所以不输出干扰码
到此结束!
本文的后部分内容。。。容我慢慢写吧。
|