看过《分析》的朋友应该有所了解,我在《分析》中主要是对
猪圈给出的记录数据的时间点的诡异做的分析。其实,那个记录中除了时间点的诡异之外,还有一个更奇怪的地方就是“数量”。什么数量呢?就是指相同IP下出现
君子乾乾与admin同时看同一个帖子的这样的“数据对”的数量。如果问题只是由我写的
Klip访问
猪圈引起的,那么应该在访问记录中,有一个
君子乾乾就应该同时有一个admin才对。但现在的情况并不是这样,是
君子乾乾与admin的数量并不完全一致。原因何在?
对于这个现象,在我看到记录数据并觉得数据有“问题”时的第一个想法就是我用自己写的Klip访问猪圈时触动了猪圈PHPBB的某一个BUG,但是否真的是只有用Klip访问才能触动这个BUG呢?我的答案是非也。原因其实也很简单,我做Klip是有一个时间过程的,在做成Klip之前我是不可能用还没做好的Klip去访问猪圈的。而在做成猪圈Klip之前,我是要用君子乾乾的帐号来登录猪圈分析论坛的网页结构的,我那个Klip里的正则表达式都是由对网页结构的分析中得来的。换句话说,在猪圈给出的记录的数据中,在我做好可以访问猪圈的Klip之前,如果天津的IP中已经出现了admin,那说明什么?说明在没有用Klip访问时这种现象已经出现了,亦即这种现象的出现与是否用我写的Klip访问猪圈其实是一点儿关系也没有的。而记录中所显示的数据也正是如此。
我在写《分析》时,猪圈的那个记录数据中只有4个天津的IP记录,从最早的那个IP记录中可以看到里面已经有admin出现了,但那时应该是我刚从君子乾乾那里借来他的帐号还没做成Klip的时候,或者说是在为写这个猪圈Klip做网页结构分析的时候。
==============
IP: 117.12.46.67(1963732547)
User: admin(#127641 ) 君子乾乾(#127657 ) 君子乾乾(#127668 ) 君子乾乾(#127679 ) 君子乾乾(#127682 ) 君子乾乾(#127689 )
==============
从这个数据中我们可以看到,里面有多个君子乾乾,但只有一个admin,而且还可以看到里面君子乾乾与admin看的帖子的ID还不一样:)那个时候我根本还没做出来Klip,但这种情况已经出现了,由此我就可以排除只有在Klip访问猪圈时才会出现这种现象的情况,因为我当时访问猪圈时用的是IE。
这意味着什么呢?意味着根本用不着Klip,只用IE访问就可以出现这种情况了。那我当时访问了什么呢?:>
我在做这个Klip的规划阶段和君子说过,我问他想看什么内容,主贴当然是一定要看的了,至于回复,我说如果只看最新回复的话,那实现起来会很容易的。而现在的关键则也是在这个最新的回复上。我在取最新回复时用的其实就是猪圈PHPBB论坛的那个帖子的排序功能,即让帖子从新到旧来排,这样我取主贴与取最新回复基本上用同一个正则表达式就可以搞定了。我记得当时我还没做Klip时,就用君子乾乾的帐号试过那个排序的功能,我只在一个帖子里试过,没在其他的帖子里试过,然后把参数记下来就再没用IE试过帖子排序的功能。
分析到此处,这次猪圈出现这个现象的原因也差不多要明朗了,即:
猪圈论坛的那个看贴插件,在用户使用PHPBB的帖子排序功能时会出现BUG,从而导致无法正常进行记录,然后就使用数据库的默认值进行记录了,而那个默认值就是0,亦很有可能就是admin的ID(有待证实)。然后这种诡异的现象就出现了。
当然了,猪圈的那个看贴插件怎样做的我不清楚,我只对猪圈提供的数据做分析,并由此得出了这些信息。
这就是我在写《分析》时已经有的但没写到《分析》中的那个构想,即:
此事是由猪圈的那个看贴插件与论坛的功能之间有潜在的BUG引起的,与君子乾乾,与我写的Klip无关。
当然,如果还有其他的因素,或不是这个因素的话,那就请对第一个天津IP中为何会出现admin的现象做出一个比较合理的解释吧。因为如果不是这个因素,我自己也很难理解那个IP数据为什么会这样,为什么会在我还没做Klip时,现象就已经出现了。
对“君子乾乾与admin的数量并不是完全的一致”,在我看来,这个在短时间内应该是正常的,但在长时间内却是不正常的。下面我会为大家说明为什么会这样子。这其实与我写的猪圈Klip的内部实现过程有关系。
我的这个Klip的内部实现的基本过程如下:
1、需要登录的话,先登录,然后保存COOKIE,保存会话
2、获取帖子的列表
3、根据帖子列表的信息取主贴,取最新的回复
4、把所有信息融合成KlipFolio可以显示的格式,显示信息
在这个过程中可以触发看贴插件做记录的其实就只有取主贴与取最新回复这两部分。这两部分在我的Klip中就是用下面的两块语句实现的:
复制内容到剪贴板
代码:
if(topics.postbody==''){
topics.postbody=Klip.convertToText(PHPBB.parseposts(PHPBB.gettopicdata(topics.id,0,'asc')));
}
if(parseInt(topics.reply)!=0){
topics.lastpost.postbody=Klip.convertToText(PHPBB.parseposts(PHPBB.gettopicdata(topics.id,0,'desc')));
}首先,我会判断这个主题的主贴是否已经取过了,如果取过了就不再去取(,节省时间)。然后会看这个主题的回复是否为0,如果为0的话说明只有主贴,那样也没有必要去取最新的回复了(,节省时间)。
于是,当出现一个新主题时,如果没有回复的话,Klip是只取主贴的。只要有回复了,不管这个最新回复是否已经取过了,Klip还是会去取一遍的。换句话说就是,当一个新主题出来后,在那个主题还没有回复时,如果君子乾乾用Klip取了主贴,然后就下线了。等他再上线后,他的IP可能已经变化了,这时猪圈的看贴记录中会在上一个IP的记录里有一个只有君子乾乾看某贴的记录而没有admin看相同帖子的记录。因为当时那个主题还没有回复,Klip没有去取最新的回复,从而也没有用到PHPBB的帖子从新到旧排序的功能。现在君子乾乾又上线了,KlipFolio会自动定时的刷新。此时Klip发现了原来那个没有回复的主题现在有回复了,然后就直接把最新的回复取过来了,从而用到了那个排序的功能。这样也就说明了为什么记录中会有“数量不一致”的现象。但从长时间来看,只要主题有回复了,我写的Klip在一个主题还是活动的时候肯定是会去取那个回复的,这也就是说,那个帖子排序功能是早晚要被用到的。对于这点儿大家也可以从君子乾乾在被封之前的那几个用KlipFolio访问的记录中看到,里面的君子乾乾的数量与admin的数量基本上是一致的。
这就是我对数据中关于“数量”问题的一些分析。
我本想等猪圈的测试数据出来后再结合数据说我的构想的,我觉得那样的说服力应该更好一些,只是数据一直没有出来,我也不想让这事儿僵着,于是我也就不再等了,直接用最初猪圈给出的那个IP记录说出我的构想也是一样的。
看过《分析》一文的朋友应该知道,我在里面给出的出现这种情况的原因是“可能是由Klip+猪圈论坛的的BUG一起造成的一场误会”。我在给出那个原因之前,把自己写的Klip仔细的看了又看,确实是没找出什么问题来,但在事实没清楚前,我也不好说这个现象就真的与我写的Klip没有关系,虽然我当时已经有了上面的构想。
另外,大家可以看我在《分析》中上传的Klip文件,在文件中取最新回复的功能是被我加上注释的。因为我想让猪圈的人自己来试,然后用他们的数据来验证自己的构想。而在随后的给扫地老僧的那个《测试
建议》中,我
建议他把取最新回复的那个功能前面的注释去掉后再测试一下。我的Klip里与看贴插件能拉上关系的就那两句,一句一句的排查,问题往往也会更容易查清楚。
在这个事情出来之后,我就随着《分析》一文把我写的Klip都公开给大家了。没多久君子也把他手中的Klip放上来了,他那个其实是我这个版本的英文版,因为当时在我写好Klip交给君子后,他说在NOTE中标签显示为乱码(君子用的是WIN2003,我用的是XP,而KlipFolio对2003的支持好像有问题),于是我就把那些中文的标签改成英文的给他了。同时,给君子的Klip中,取最新回复的功能是没有被加注释的,这个大家自己去看他上传的那个Klip的代码就知道了。
不过话又说回来,到现在为止,我也不清楚猪圈的看贴插件是否也公开了代码让大家来看,我不知道在这段时间内这个看贴插件是否有被改动过。我所知道的就是猪圈提供的IP记录数据,以及我从数据中得到的一些信息。而且现在我也不知道猪圈对我写的Klip进行了测试没有,有了测试结果没有。不过现在的测试结果对我来说已经不重要了,我用《分析》一文,以及这篇文章应该已经可以把猪圈提供的IP记录数据中出现的现象说的比较明白了,数据为什么这样,为什么不那样,我想我也都分析的比较清楚了。至于猪圈自己测试后得到的数据与我分析的是否一样,一样也好,不一样也好,我不再关心。原因很简单,除非猪圈可以证明已经还原了原始的环境在做这个测试,否则这中间如果有什么地方做过变动,又或某些设置的改变使得以前可能会出现的现象现在不再出现,这些情况都不是我所能预料的。我给出的信息基本上都是基于猪圈提供的那个最初的IP记录数据,如果猪圈自己测试的结果与我的分析不一致,那我也很期待猪圈可以给出一个你们自己认为更加合理,更有说服力的数据分析来,毕竟数据都是你们给出的,而我也没有机会去自己验证自己的构想。如果猪圈的测试结果与我的分析差不多,还希望你们可以还当事人一个清白。
到此,我个人对此次事件的分析基本上也算是完整了。结论我就不下了,看过文章的人心里也应该已经有数了。
逍遥 于逍遥居
二○○八年二月十三日
PS:IP记录的数据请看《分析》中的附件图片,我就不在这里贴出了。