陈德馨

Z-Blog评论验证码看不清楚的解决方法

973人参与 |分类: 站长百科|时间:2016年07月29日 18:58

相信很多使用Zblog的朋友都有一个很纠结的问题,那就是在垃圾评论与评论验证码之间的选择问题,不开启评论验证码很容易导致很多垃圾评论,开启评论验证码功能的话,Z-blog自带的评论验证码真的是很鸡肋的功能设计,四个字:看不清楚!虽然现在应用中心也有相关的插件,比如鸟儿博客写的替换自带验证码的插件。

416-01.jpg

但是鸟儿博客的这款插件是收费的,需要支付66元。另外还有一款免费的,安装之后虽然能够更明确的显示验证码,但是在访客想发表评论的时候,输入的验证码会出现一直报错的情况,一直提示输入验证码,即使访客输入的验证码是正确的,还是会报错,貌似这款插件不能识别是否已经输入验证码。再加上这款插件的的作者的官网已经关闭,并且2年来从未修复这个BUG,所以还是等于没用。

前几天,陈德馨博客看到知名博主卢松松在本站评论说验证码太难辨认。(至于是否是卢松松本人,这里不做鉴别哈。)

416-00.jpg

自从有人反馈这个问题之后,就一直想要解决这个问题,由于之前对于Zblog的ASP版的程序结构还是比较了解的,所以现在在PHP版上也比较有方向。所以,今天忙完工作,就决定把这个拖了10多天的问题解决掉。经过一番摸索,终于找到解决方法。在这里也顺便分享给大家,给需要的朋友。

一、找出评论验证码对应的程序文件

一般这种程序自带的功能会放在 /zb_system/ 文件夹。而经过我分析后,验证码的程序文件的路径为:

/zb_system/function/lib/validatecode.php

二、打开 validatecode.php文件,分析各个模块对应的代码

由于Zblog程序设计团队在设计程序的时候对各个代码段的功能进行了注释,所以你可以很清晰的了解各个代码段的作用。比如:

416.jpg

上面这段代码中的 protected $codelen = 5;//位数 是指验证码的位数,默认是5,我们可以改成4,如果你修改成6位以上的话,你需要修改下面的验证码的宽度,要不然无法正常现实,字体设置太小的话,也不利于辨认,所以一切的修改都要从访客的用户体验出发。

三、验证码字体及线条、雪花等干扰项的修改

416-0000.jpg

上面这段代码就是验证码中线条、雪花干扰项的代码文件。我主要做了如下修改。

1、验证码默认调用的字体文件是 /zb_system/defend/arial.ttf 文件。我修改成了自定义的字体文件。

默认代码:

$this->font = $zbp->path . (isset($zbp->option['ZC_VERIFYCODE_FONT'])?$zbp->option['ZC_VERIFYCODE_FONT']:'zb_system/defend/arial.ttf');

修改成:

$this->font = $zbp->usersdir . 'theme/ChenDeXin/style/fonts/' . mt_rand(1,3) . '.ttf';

我在 /theme/ChenDeXin/style/fonts/ 文件夹分别放置了名称为 1.ttf、2.ttf、3.ttf三个字体文件给程序调用,这需要你根据你使用主题的实际情况对上面代码的路径进行修改。

2、修改线条、雪花干扰项的代码。

默认代码:

protected function createLine() {

for ($i=0;$i<6;$i++) {

$color = imagecolorallocate($this->img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));

imageline($this->img,mt_rand(0,$this->width),mt_rand(0,$this->height),mt_rand(0,$this->width),mt_rand(0,$this->height),$color);

}

for ($i=0;$i<100;$i++) {

$color = imagecolorallocate($this->img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));

imagestring($this->img,mt_rand(1,5),mt_rand(0,$this->width),mt_rand(0,$this->height),'*',$color);

}

}

修改成:

protected function createLine() {

for ($i=3; $i<=$this->height-3; $i=$i+3) {

$color = imagecolorallocate($this->img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));

imageline($this->img,mt_rand(0,$this->width),mt_rand(0,$this->height),mt_rand(0,$this->width),mt_rand(0,$this->height),$color);

}

for ($i=2;$i<100;$i=$i+6) {

$color = imagecolorallocate($this->img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));

imagestring($this->img,mt_rand(1,5),mt_rand(0,$this->width),mt_rand(0,$this->height),'*',$color);

}

}

按照上面的步骤修改完成之后,基本上已经减低了验证码识别难度,上面提及的字体文件你可以直接去网上下载自己喜欢的字体文件。这样下来,你既减低了验证码的辨别难度,又等于定制了属于自己的个性验证码了。

四、终极方法——完全取消线条、雪花等干扰项

如果你既不想定制属于自己的个性验证码,又对Zblog自带的验证码深恶痛绝的话,那就干脆点,直接取消线条、雪花等干扰项吧,这样子可以直接变为纯色背景,绝对的高辨识度!

1、把 /zb_system/function/lib/validatecode.php 文件下载到本地,并且复制一份出来备份,防止意外!

1、打开 validatecode.php 文件,在文件中搜索如下代码:

public function GetImg($n = null) {

$this->createBg();

$this->createCode($n);

$this->createLine();

$this->createFont();

$this->outPut();

}

修改成:

public function GetImg($n = null) {

$this->createBg();

$this->createCode($n);

// $this->createLine();

$this->createFont();

$this->outPut();

}

这样就注释掉了干扰项功能,简单高效快捷吧。下面上一张修改前后的对比图。

qian.jpg

好了,关于Z-Blog评论验证码看不清楚的解决方法就讲到这里,上面不但提供了个性验证码的方法,也提供了替换Zblog自带验证码的方法,可以说是关于zblog验证码的文章中最全最详细的了,还有不明白的请直接在下面评论框留言,大家一起交流成长。

来源:陈德馨博客(微信/QQ号:35435164),转载请保留出处和链接!

地址:

必填

选填

选填

◎已有 2 人评论,请发表您的观点。

  
    
1楼丹心   2016-08-01 00:54:08
你方便了广大博友的同时也断了部分插件开发者的财路哦!
回复
1楼陈德馨[博主]   2016-08-03 15:44:55
如果怕麻烦的朋友或者对代码一点也不熟悉的朋友,可以直接去应用中心购买鸟儿博客开发的插件。
回复