用户
 找回密码
 入住 CI 中国社区
搜索
查看: 3495|回复: 1
收起左侧

采用CI提供的Captcha辅助函数简单实现图片验证码

[复制链接]
发表于 2013-9-6 13:32:57 | 显示全部楼层 |阅读模式
本帖最后由 Jason Chan 于 2013-9-6 15:33 编辑

其实用户文档已经讲得很明白了,我只是简单提供一下我的实现过程和思路,供大家参考。
生成验证码图片的代码段放在control文件当中,比如当用户的错误登陆次数达到多少次的时候,就会执行该段代码。将生成的图片img的相关html内容放入某变量中,在view中对该变量进行判断显示即可。
根据用户文档的提示,img_path 和 img_url 参数是必须的
$vals = array(
    'word' => 'Random word',
    'img_path' => './captcha/',
    'img_url' => 'http://example.com/captcha/',

    'font_path' => './path/to/fonts/texb.ttf',
    'img_width' => '150',
    'img_height' => 30,
    'expiration' => 7200
    );

$cap = create_captcha($vals);
echo $cap['image'];

在路径设置这个地方需要注意一下:
1、必须已经存在该captcha目录(文件夹),否则create_captcha方法中的核心内容不会执行。
2、该captcha目录(文件夹)必须在CI的根目录下,就是和application、includes、system等目录(文件夹)处于同一层;当然该文件名可以更换,只要与路径设置中的保持一致即可。(我也尝试过将img_url换在includes等目录的其他位置,但是没有成功,欢迎高手赐教{:soso_e127:})
我的配置:
‘img_path’ => './captcha/',
'img_url' => 'http://'.$_SERVER['SERVER_ADDR'].'/ci/captcha/'

3、注意img_url的配置,采用上述或base_url()方法均可正常执行create_captcha方法并在captcha中生成验证码图片;但是,如果你在config.php文件夹中修改了index_page属性,可能会影响页面的图片显示;当然,这只是一个路径的问题,你可以在页面显示不正确时,通过查看图片的路径来分析是什么地方出了问题,然后修改img_url来进行调试。

关于生成的多余图片的问题,配置项expiration可以设置时间自动删除;

提交图片验证码验证的思路,我是通过form_validation类来进行验证的;重写一个MY_Form_validation.php(放入libraries中)继承CI_Form_validation,然后添加一个ci_validate_recaptcha方法即可。




本版积分规则