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

[已解决] 验证码获取不到,显示不出,不存数据库,修改字符个数

[复制链接]
发表于 2014-10-20 10:50:20 | 显示全部楼层 |阅读模式
本帖最后由 chenxue4076 于 2014-10-20 10:53 编辑

原文地址:http://blog.windigniter.com/2014/10/codeigniter-captcha/

1.当然是显示不出验证码的问题, 如果按照文档类似这种代码

$vals = array(   'img_path' =>  '/uploads/captcha/',   'img_url' => base_url('uploads/captcha').'/',   'img_width' => 100,   'img_height' => 40,   'expiration' => 300);$cap = create_captcha($vals);

发现无法获取cap的值,或者说返回的值是false, 可能原因是

  • 确保img_path,img_url不为空
  • 确保img_path是个正确路径,这里填写相对路径可能会返回空
  • img_path必须可写,windows服务器不存在这个问题
  • GD库没有启用

个人这里出现问题是因为img_path写的相对路径,改成绝对路径就返回正确的值了。
代码如下

$vals = array(   'img_path' =>  dirname(BASEPATH).'/uploads/captcha/',   'img_url' => base_url('uploads/captcha').'/',   'img_width' => 100,   'img_height' => 40,   'expiration' => 300);$cap = create_captcha($vals);

如果有值但是不显示看是不是img_url少了“/”。

2.captcha存入数据库,我看官方文档里面说使用数据库存储,在获取的时候,使用字符串和IP再加过期判断,个人觉得这里很有问题, 首页用户主动刷新验证码的时候,数据库里面的旧验证码是肯定没有过期的,这个时候如果用户不是输入新的,仍然输入旧的这里仍能够验证通过,当然如果你说用户如果能识别出旧的就不刷新了,我这个顾虑是多余的,也是有道理。我这里只是提出问题。

3.如果不想存入数据库,可以选择存入session或者cookie,这样反而简单很多,你根本不用去写入,查询和删除那些记录。只要将 里面word的值记录下来就行了。

4.如果闲验证码里面的字符个数过多,1.直接修改这个helper辅助文件,或者重写下,保存成MY_captcha_helper.php 也是可以的。


发表于 2014-10-20 11:31:03 | 显示全部楼层
htaccess里添加RewriteRule ^(.*)$ index.php/$1 [L] 试试

参考 http://codeigniter.org.cn/user_guide/general/urls.html
或者在htaccess里边补充一个uploads免过滤
发表于 2016-12-17 10:22:24 | 显示全部楼层
我也遇到了同样的问题,如下
编辑"application/controllers/welcome.php",添加"captcha"方法
    public function captcha()
    {
        $this->load->helper('captcha');
        
        $vals = array(
            //'word' => 'Random word',
            'word' => 'Random word',
            'img_path' =>'./captcha/',
            'img_url' => base_url().'captcha/',
            //'font_path' => './path/to/fonts/texb.ttf',
            'img_width' => '150',
            'img_height' => 30,
            'expiration' => 7200
        );

        $cap = create_captcha($vals);

        // Session $cap['word'] OR Set COOKIE
        // TO DO..

        header('Content-Type: image/jpeg');
        echo $cap['image'];
    }
////////////////////////////////////////
编辑"application/views/welcome_message.php",添加"img"标签
<img id="codeimage" on-click="javascript:this.src='<?php echo site_url('welcome/captcha');?>?'+Math.random();" src="<?php echo site_url('welcome/captcha');?>"

为什么显示不出来图片啊?为什么显示不出来图片啊?为什么显示不出来图片啊?为什么显示不出来图片啊?

在application同级目下建有captcha目录,里面有图片生成,就是在<img id="codeimage" on-click="javascript:this.src='<?php echo site_url('welcome/captcha');?>?'+Math.random();" src="<?php echo site_url('welcome/captcha');?>"显示不出来

site_url('welcome/captcha');
这个生成的 URL 放浏览器地址栏执行,也有图片生成

本版积分规则