SpeedPHP验证码扩展类

#1 starlight36

此验证码扩展类为标准扩展形式,将两文件放于SpeedPHP/Extensions之下即可。

验证码通过spConfig.php进行设置,样例如下:

'ext' => array(
'spVerifyCode' => array( //验证码扩展
        'width' => 60, //验证码宽度
        'height' => 20, //验证码高度
        'length' => 4, //验证码字符长度
        'bgcolor' => 'FFFFFF', //背景色
        'noisenum' => 50, //图像噪点数量
        'fontsize' => 22, //字体大小
        'fontfile' => 'font.ttf', //字体文件
        'format' => 'gif', //验证码输出图片格式
),
),


生成验证码可以在控制器类中使用如下代码:



function _vcode() {
        $vcode = spClass('spVerifyCode');
        $vcode->display();
}



验证验证码的代码示例如下:



function _vcode_check() {
        $vcode = spClass('spVerifyCode');
        if($vcode->verify($this->spArgs('verifycode'))) {
                //通过验证
        }else{
                //没有通过验证
        }
}




另外verify方法还支持第二个参数,值为TRUE/FALSE, 用来决定是否从SESSION中清空本次验证的验证码值

下载:
spVerifyCode.zip

该贴已经同步到 starlight36的微博

2011-02-11 15:39:10

#2 jake的马甲

:handshake 很好,下来先试试,感谢楼主

2011-02-11 16:16:47

#3 jiayan41

跟进jake的马甲中~

2011-02-12 10:24:47

#4 vsxp

跟进,楼主是个高手。

2011-03-10 17:27:44

#5 ychjasp

学习了:(

2011-03-14 10:32:59

#6 虞飞

验证码通过spConfig.php进行设置

但是我在spConfig.php里面加了以上的设置后,程序还依然按照程序内部的public变量来进行运作,这个该怎么处理?

2011-07-02 00:00:07

#7 jake

回复 6 虞飞


或许再看看spConfig的设置,楼主的介绍其实完整来说是这样

'ext' => array(
'spVerifyCode' => array( //验证码扩展
        'width' => 60, //验证码宽度
        'height' => 20, //验证码高度
        'length' => 4, //验证码字符长度
        'bgcolor' => 'FFFFFF', //背景色
        'noisenum' => 50, //图像噪点数量
        'fontsize' => 22, //字体大小
        'fontfile' => 'font.ttf', //字体文件
        'format' => 'gif', //验证码输出图片格式
),
),

这里也帮楼主改了一下帖子,这样会比较明确一些:handshake

2011-07-02 03:49:20

#8 虞飞

感谢jake大大,果然灵验了,哈哈

呃,这个验证码给力啊:办套;P

2011-07-02 04:05:18

#9 awinds

请教下,如果两个页面同时用这个生成验证码图片
那么第一个访问的时候页面会不会验证失败呢?
可否在display的时候给验证码加个ID,这个验证的时候也通过这个ID来验证

2011-07-06 22:47:24

#10 jake

两个页面如果是同一个浏览器同一个用户,那会失效。因为是同一个SESSION,不过这种情况非常少见。

如果是两个用户(或者多个用户)访问同一个页面,那没影响。

2011-07-06 22:53:19

#11 冥夜

两个验证码在同一个页面上呢,我用的论坛的其他的,好像不能在同一个页面上出现两个验证嘛@@@

2011-07-26 18:07:27

#12 phpha

回复 11 冥夜


    出现2个验证码应该没问题啊!
只是你别用同一个SESSION名就行了,不然肯定覆盖了……

2011-07-26 18:48:32

#13 虞飞

这个扩展生成的验证码一般在什么情况下会无法生成图片?已经知道GD库有效。

2011-08-30 11:23:25

#14 jake

回复 13 虞飞


   在图形显示前代码有输出,比如说bom或者空字符空格之类的

2011-08-30 12:40:14

#15 虞飞

检查过了,所有的PHP文件、HTML大部分都正常,一两个有BOM的文件已经清除,清除了所有的模板缓存。这个验证码类也用原始文件覆盖过了。还是无法显示,还有什么可能性吗?

2011-08-31 01:36:32

#16 小子210

为什么我用的时候,验证码图片里面只有背景没有码呢?

2011-11-22 11:47:46

#17 jake

为什么我用的时候,验证码图片里面只有背景没有码呢?
小子210 发表于 2011-11-22 11:47
没见过这种情况,看看PHP的GD库装好了没,要不重新找个环境试试

2011-11-22 11:55:36

#18 小子210

回复 17 jake

好了,原来是字体文件没放对地方!:L

2011-11-22 14:22:51

#19 walalaba

怎么让验证码在页面固定位置显示啊??

2012-01-13 11:05:44

#20 walalaba

这个验证码怎么在页面中显示啊,?怎么用啊?   给个帮助吧?

2012-01-30 12:01:44

#21 sea桥

2012-02-16 23:00:48

#22 pengtong

搞定了,很好用!就是CSS那里还是对不齐!

2012-04-10 23:49:33

#23 tomcen

jake 发表于 2011-7-2 03:49
回复 6 虞飞
jake你修改的代码和楼主给的有区别吗? 我用文件比较工具比较了一下, 没有比较出来不同啊!

2012-07-10 21:32:58

#24 jake

tomcen 发表于 2012-7-10 21:32
jake你修改的代码和楼主给的有区别吗? 我用文件比较工具比较了一下, 没有比较出来不同啊!
...
我没有修改,只是帮忙排版一下。怎么用上了文件比较工具~~~

2012-07-10 21:34:57

#25 gabacai

104行报错,eregi_replace过时了.

2012-10-26 14:47:41

#26 diannao580

为什么我的不行呢

2012-12-23 21:30:09

#27 zjwking

同一页面,有3个验证码,怎么解决?

2013-02-01 00:02:01

#28 jake

zjwking 发表于 2013-2-1 00:02
同一页面,有3个验证码,怎么解决?
有些麻烦,要设置三个不同的session(这是原理)。

或者建议你这样做,三个验证码都不显示,等用户点击验证码的输入框再通过JS拉到验证码显示(很多网站都是这样做)

题外话:我没见过哪个网站有三个验证码的,嘿嘿

2013-02-01 17:23:35

#29 zjwking

jake 发表于 2013-2-1 17:23
有些麻烦,要设置三个不同的session(这是原理)。

或者建议你这样做,三个验证码都不显示,等用户点击 ...
我有一个网页,有3个层,每 个层都有一个验证码,登陆验证码,注册验证码,密码取回验证码,呵呵

2013-02-03 21:43:46

#30 haozhe

用浏览器直接访问验证码图片,居然是乱码,这是怎么回事?

2013-03-17 23:41:21

#31 coolhpy

报告一个绕过验证的B U G,大家注意下。见图。

1.png

TO Jake,
能否把这个回复直接置顶到主题帖中,以便让更多的朋友可以直接看到这个问题。谢谢!
另外,为什么这样也会说有不良内容啊!!

2013-04-25 23:15:34

#32 coolhpy

郁闷,代码又贴错了。。。下面这个才对!!!
public function verify($var, $is_clear = TRUE) {
        $result = FALSE;
        if (!$this->vc_session && $var == $this->vc_session) {
                $result = TRUE;
                if($is_clear) $this->vc_session = '';
        }
        return $result;
}

2013-04-25 23:17:39

#33 coolhpy

代码里面不能加颜色。。啊啊啊啊,我要疯了!!!
public function verify($var, $is_clear = TRUE) {
        $result = FALSE;
        if (!$this->vc_session && $var == $this->vc_session) {
                $result = TRUE;
                if($is_clear) $this->vc_session = '';
        }
        return $result;
}

2013-04-25 23:18:52

#34 coolhpy

好吧,我承认我有罪...上面的还是贴错。。。{:soso_e105:}

public function verify($var, $is_clear = TRUE) {
        $result = FALSE;
        if (!empty($this->vc_session) && $var == $this->vc_session) {
                $result = TRUE;
        }
        if($is_clear) $this->vc_session = '';
        return $result;
}

2013-04-25 23:45:09

#35 jake

coolhpy 发表于 2013-4-25 23:45
好吧,我承认我有罪...上面的还是贴错。。。

public function verify($var, $is_clear = TRU ...
呵呵,其实不算bug,验证码类是检验验证码是否正确的,

而空值检查,这是一开始要做的,不仅是前端JS要判断验证码是否空值,后端提交后也必须要验证是否空值,之后才开始做验证码的检查。

简单说,必填项要首先做检查,然后再到特殊检查。建议必填项的检查使用spVerifier进行。

2013-04-26 09:00:40

#36 jake

coolhpy 发表于 2013-4-25 23:15
报告一个绕过验证的B U G,大家注意下。见图。
呵呵,其实不算bug,验证码类是检验验证码是否正确的,

而空值检查,这是一开始要做的,不仅是前端JS要判断验证码是否空值,后端提交后也必须要验证是否空值,之后才开始做验证码的检查。

简单说,必填项要首先做检查,然后再到特殊检查(比如说验证码,匹配等)。建议必填项的检查使用spVerifier进行。

PS:原来回复可以顶置的哦,没用过呢。

2013-04-26 09:01:43

#37 coolhpy

:lol 其实我发了帖子之后,也想到这个问题了,,不过想想一下子已经发了四个帖子,就不在回了,,多个保险也好,省的有些和我一样想偷懒的人也犯这样的错~

2013-04-26 09:26:58

#38 jake

coolhpy 发表于 2013-4-26 09:26
其实我发了帖子之后,也想到这个问题了,,不过想想一下子已经发了四个帖子,就不在回了,,多个保险 ...
是啊,已经顶置了。

2013-04-26 09:51:45

#39 和珅

好东西,收下了

2013-05-06 16:09:10

#40 cherry

我把字体放大及高度调整后怎么不起作用?在spConfig.php中设定的

2013-05-15 16:55:22

#41 开心鬼

弄了半天验证码不显示,调试了一下午。。。。
最后发现是eregi_repalce报错。估计是php版本的问题吧,原先用没事的。
把104行的eregi_repalce('^','',$color)改为preg_replace('/^/', '', $color)就行了。或者改成str_replace杀的都行

2014-01-01 16:08:58

#42 qq506059300

$this->vc_session = &$_SESSION[$GLOBALS['G_SP']['sp_app_id']]['verifycode']

2014-05-28 10:05:23

#43 qq506059300

$this->vc_session = &$_SESSION[$GLOBALS['G_SP']['sp_app_id']]['verifycode']

这句话没看懂,请大侠指教

2014-05-28 10:09:53

#44 527802614

感谢分享,感谢分享。

2016-03-03 22:09:40

#45 hxy100

php5.3以上支持有问题啊,即便把eregi_replace改成preg_replace还是有问题,啥也不显示,打开报错,还是一样的,啥报错信息都没有

2016-04-16 13:14:06

#46 278086346

jake 发表于 2013-4-26 09:01
呵呵,其实不算bug,验证码类是检验验证码是否正确的,

而空值检查,这是一开始要做的,不仅是前端JS要判 ...
想问下,这个不支持5.4以上,否则验证码出错,求解,怎么让他支持PHP高版本

2017-07-31 14:13:47

#47 278086346

jake 发表于 2013-4-26 09:01
呵呵,其实不算bug,验证码类是检验验证码是否正确的,

而空值检查,这是一开始要做的,不仅是前端JS要判 ...
想问下,这个不支持5.4以上,否则验证码出错,求解,怎么让他支持PHP高版本

2017-07-31 14:13:46