SpeedPHP验证码扩展类
发布于:2022-01-17 09:50:54
#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,大家注意下。见图。

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
想问下,这个不支持5.4以上,否则验证码出错,求解,怎么让他支持PHP高版本
2017-07-31 14:13:47
#47 278086346
想问下,这个不支持5.4以上,否则验证码出错,求解,怎么让他支持PHP高版本
2017-07-31 14:13:46