Discuz教程网

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

[复制链接]
authicon dly 发表于 2011-9-4 17:59:09 | 显示全部楼层 |阅读模式
最近在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
搜索 干扰码我们看到

  1. jammer tinyint(1) NOT NULL default '0' COMMENT '是否启用干扰码'
复制代码

在pre_forum_forum表中

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

关键的处理是在这个代码处
  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. 用白话描述就是 如果这个版块开启了干扰码,并且 发帖人不等于看贴人,就输出干扰码。
复制代码
好了。现在明白什么意思了吧。看不到干扰码的朋友应该是自己发帖看自己的贴,所以不输出干扰码
到此结束!
本文的后部分内容。。。容我慢慢写吧。










上一篇:Discuz 大流量站点推荐使用稳定性更好的APC加速缓存
下一篇:discuzx中DIY的时候模块为空(消失)的检查
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1314学习网 ( 浙ICP备10214163号 )

GMT+8, 2024-11-1 07:24

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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