1 教程-内容提要
1.1 CodeIgniter3.1教程——开始
1.2 加载静态内容
1.3 读取新闻条目
1.4 创建新闻条目
2 常规主题
2.1 CodeIgniter URL
2.2 控制器
2.3 保留名称
2.4 视图
2.5 模型
2.6 辅助函数
2.7 使用 CodeIgniter 类库
2.8 创建类库
2.9 使用 CodeIgniter 驱动器
2.10 创建驱动器
2.11 创建核心系统类
2.12 创建附属类
2.13 钩子 - 扩展框架核心
2.14 自动加载资源
2.15 公共函数
2.16 兼容性函数
2.17 URI 路由
2.18 错误处理
2.19 网页缓存
2.20 程序分析
2.21 以 CLI 方式运行
2.22 管理你的应用程序
2.23 处理多环境
2.24 在视图文件中使用 PHP 替代语法
2.25 安全
2.26 PHP 开发规范
3 类库参考
3.1 基准测试类
3.2 缓存驱动器
3.3 日历类
3.4 购物车类
3.5 配置类
3.6 Email 类
3.7 加密类(废弃)
3.8 加密类(新版)
3.9 文件上传类
3.10 表单验证类
3.11 FTP 类
3.12 图像处理类
3.13 输入类
3.14 Javascript 类
3.15 语言类
3.16 加载器类
3.17 迁移类
3.18 输出类
3.19 分页类
3.20 模板解析类
3.21 安全类
3.22 Session 类
3.23 HTML 表格类
3.24 引用通告类
3.25 排版类
3.26 单元测试类
3.27 URI 类
3.28 用户代理类
3.29 XML-RPC 与 XML-RPC 服务器类
3.30 Zip 编码类
4 数据库参考
4.1 数据库快速入门: 示例代码
4.2 数据库配置
4.3 连接你的数据库
4.4 查询
4.5 生成查询结果
4.6 查询辅助函数
4.7 查询构造器类
4.8 事务
4.9 数据库元数据
4.10 自定义函数调用
4.11 查询缓存
4.12 数据库工厂类
4.13 数据库工具类
4.14 数据库驱动器参考
5 辅助函数参考
5.1 数组辅助函数
5.2 验证码辅助函数
5.3 Cookie 辅助函数
5.4 日期辅助函数
5.5 目录辅助函数
5.6 下载辅助函数
5.7 邮件辅助函数
5.8 文件辅助函数
5.9 表单辅助函数
5.10 HTML 辅助函数
5.11 Inflector 辅助函数
5.12 语言辅助函数
5.13 数字辅助函数
5.14 路径辅助函数
5.15 安全辅助函数
5.16 表情辅助函数(废弃)
5.17 字符串辅助函数
5.18 文本辅助函数
5.19 排版辅助函数
5.20 URL 辅助函数
5.21 XML 辅助函数

验证码辅助函数

2017-12-03 20:03:05
linefo
621
最后编辑:linefo 于 2017-12-03 21:13:52

验证码辅助函数

验证码辅助函数文件包含了一些帮助你创建验证码图片的函数。

加载辅助函数

该辅助函数通过下面的代码加载:

$this->load->helper('captcha');

使用验证码辅助函数

辅助函数加载之后你可以像下面这样生成一个验证码图片:

$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,
    'word_length'   => 8,
    'font_size' => 16,
    'img_id'    => 'Imageid',
    'pool'      => '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',

    // White background and border, black text and red grid
    'colors'    => array(
        'background' => array(255, 255, 255),
        'border' => array(255, 255, 255),
        'text' => array(0, 0, 0),
        'grid' => array(255, 40, 40)
    )
);

$cap = create_captcha($vals);
echo $cap['image'];
  • 验证码辅助函数需要使用 GD 图像库。
  • 只有 img_pathimg_url 这两个参数是必须的。
  • 如果没有提供 word 参数,该函数将生成一个随机的 ASCII 字符串。 你也可以使用自己的词库,从里面随机挑选。
  • 如果你不设置 TRUE TYPE 字体(译者注:是主要的三种计算机矢量字体之一)的路径,将使用 GD 默认的字体。
  • "captcha" 目录必须是可写的。
  • expiration 参数表示验证码图片在删除之前将保留多久(单位为秒),默认保留 2 小时。
  • word_length 默认值为 8, pool 默认值为 '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
  • font_size 默认值为 16,GD 库的字体对大小有限制,如果字体大小需要更大一点的话可以设置一种 TRUE TYPE 字体。
  • img_id 将会设置为验证码图片的 "id" 。
  • colors 数组中如果有某个颜色未设置,将使用默认颜色。

添加到数据库

使用验证码函数是为了防止用户胡乱提交,要做到这一点,你需要将 create_captcha() 函数返回的信息保存到数据库中。 然后,等用户提交表单数据时,通过数据库中保存的数据进行验证,并确保它没有过期。

这里是数据表的一个例子:

CREATE TABLE captcha (
    captcha_id bigint(13) unsigned NOT NULL auto_increment,
    captcha_time int(10) unsigned NOT NULL,
    ip_address varchar(45) NOT NULL,
    word varchar(20) NOT NULL,
    PRIMARY KEY `captcha_id` (`captcha_id`),
    KEY `word` (`word`)
);

这里是使用数据库的示例。在显示验证码的那个页面,你的代码类似于下面这样:

$this->load->helper('captcha');
$vals = array(
    'img_path'  => './captcha/',
    'img_url'   => 'http://example.com/captcha/'
);

$cap = create_captcha($vals);
$data = array(
    'captcha_time'  => $cap['time'],
    'ip_address'    => $this->input->ip_address(),
    'word'      => $cap['word']
);

$query = $this->db->insert_string('captcha', $data);
$this->db->query($query);

echo 'Submit the word you see below:';
echo $cap['image'];
echo '<input type="text" name="captcha" value="" />';

然后在处理用户提交的页面,处理如下:

// First, delete old captchas
$expiration = time() - 7200; // Two hour limit
$this->db->where('captcha_time < ', $expiration)
    ->delete('captcha');

// Then see if a captcha exists:
$sql = 'SELECT COUNT(*) AS count FROM captcha WHERE word = ? AND ip_address = ? AND captcha_time > ?';
$binds = array($_POST['captcha'], $this->input->ip_address(), $expiration);
$query = $this->db->query($sql, $binds);
$row = $query->row();

if ($row->count == 0)
{
    echo 'You must submit the word that appears in the image.';
}

可用函数

该辅助函数有下列可用函数:

create_captcha([$data = ''[, $img_path = ''[, $img_url = ''[, $font_path = '']]]])
参数:
  • $data (array) -- Array of data for the CAPTCHA
  • $img_path (string) -- Path to create the image in
  • $img_url (string) -- URL to the CAPTCHA image folder
  • $font_path (string) -- Server path to font
返回:

array('word' => $word, 'time' => $now, 'image' => $img)

返回类型:

array

根据你提供的一系列参数生成一张验证码图片,返回包含此图片信息的数组。

array(
    'image' => IMAGE TAG
    'time'  => TIMESTAMP (in microtime)
    'word'  => CAPTCHA WORD
)

image 就是一个 image 标签:

<img src="http://example.com/captcha/12345.jpg" width="140" height="50" />

time 是一个毫秒级的时间戳,作为图片的文件名(不带扩展名)。就像这样:1139612155.3422

word 是验证码图片中的文字,如果在函数的参数中没有指定 word 参数,这将是一个随机字符串。