- 浏览: 7935419 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (2425)
- 软件工程 (75)
- JAVA相关 (662)
- ajax/web相关 (351)
- 数据库相关/oracle (218)
- PHP (147)
- UNIX/LINUX/FREEBSD/solaris (118)
- 音乐探讨 (1)
- 闲话 (11)
- 网络安全等 (21)
- .NET (153)
- ROR和GOG (10)
- [网站分类]4.其他技术区 (181)
- 算法等 (7)
- [随笔分类]SOA (8)
- 收藏区 (71)
- 金融证券 (4)
- [网站分类]5.企业信息化 (3)
- c&c++学习 (1)
- 读书区 (11)
- 其它 (10)
- 收藏夹 (1)
- 设计模式 (1)
- FLEX (14)
- Android (98)
- 软件工程心理学系列 (4)
- HTML5 (6)
- C/C++ (0)
- 数据结构 (0)
- 书评 (3)
- python (17)
- NOSQL (10)
- MYSQL (85)
- java之各类测试 (18)
- nodejs (1)
- JAVA (1)
- neo4j (3)
- VUE (4)
- docker相关 (1)
最新评论
-
xiaobadi:
jacky~~~~~~~~~
推荐两个不错的mybatis GUI生成工具 -
masuweng:
(转)JAVA获得机器码的实现 -
albert0707:
有些扩展名为null
java 7中可以判断文件的contenttype了 -
albert0707:
非常感谢!!!!!!!!!
java 7中可以判断文件的contenttype了 -
zhangle:
https://zhuban.me竹板共享 - 高效便捷的文档 ...
一个不错的网络白板工具
在CI中,做验证类可以这样做,首先给出的是手册中的做法
加载辅助函数
用下面的代码加载验证码辅助函数:
$this->load->helper('captcha');
可用的函数如下:
captcha_create($data)
根据你指定的一系列参数创建验证码图像, 返回值是一个包含此图像数据的数组.
[array]
(
'image' => IMAGE TAG
'time' => TIMESTAMP (毫秒)
'word' => CAPTCHA WORD
)
"image"是实际存在image标记:
<img src="http://example.com/captcha/12345.jpg" width="140" height="50" />
这里的"time"是一个毫秒级的时间戳,作为图片文件名(不包含扩展名). 就像这样: 1139612155.3422
"word"是验证码, 如果不提供, 将是一个随机字符串.
使用验证码辅助函数:
加载后你可以向这样产生一个验证码:
$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'];
验证码辅助函数必须需要GD库.
只有 img_path 和 img_url 参数是必须的.
如果"word"未提供, 将自动产生一个ASCII字符串. 你也可以使用自己的词库,从里面随机挑选.
如果未提供TRUE TYPE字体的路径, 将会使用GD自带的字体.
"captcha" 目录必须可写(666, or 777)
"expiration" (秒) 指定了验证码图片的超时删除时间. 默认是2小时.
配合数据库
为了在提交表单时用到验证,你需要将create_captcha()生成的结果保存到数据库。这样,当用户提交表单时,你就可以验证数据库里是否有此验证码或是否过期。
这是一个数据表的例子:
CREATE TABLE captcha (
captcha_id bigint(13) unsigned NOT NULL auto_increment,
captcha_time int(10) unsigned NOT NULL,
ip_address varchar(16) default '0' 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 '提交下面的验证码:';
echo $cap['image'];
echo '<input type="text" name="captcha" value="" />';
然后页面提交后如下处理:
// 首先删除旧的验证码
$expiration = time()-7200; // 2小时限制
$this->db->query("DELETE FROM captcha WHERE captcha_time < ".$expiration);
// 然后再看是否有验证码存在:
$sql = "SELECT COUNT(*) AS count FROM captcha WHERE word = ? AND ip_address = ? AND date > ?";
$binds = array($_POST['captcha'], $this->input->ip_address(), $expiration);
$query = $this->db->query($sql, $binds);
$row = $query->row();
if ($row->count == 0)
{
echo "你必须提交图像上显示的验证码";
}
第一种做法时,提交时,也验证验证码是否过期,比较严格, 然后是第2种做法,自己简单定义一个,比如captha.php,代码如下:
?php
session_start();
//登录验证码
function GetVerify($length)
{
$strings = Array('3','4','5','6','7','a','b','c','d','e','f','h','i','j','k','m','n','p','r','s','t','u','v','w','x','y');
$chrNum = "";
$count = count($strings);
for ($i = 1; $i <= $length; $i++) { //循环随机取字符生成字符串
$chrNum .= $strings[rand(0,$count-1)];
}
return $chrNum;
}
function code(){
$fontSize = 20; //定义字体大小
$length = 5; //定义字符串长度
$strNum = GetVerify($length); //获取一个随机字符串
$_SESSION['verify'] = $strNum; //付值给session
$width = 90; //定义图片宽度
$height = 30; //定义图片高度
$im = imagecreate($width,$height); //生成一张指定宽高的图片
$backgroundcolor = imagecolorallocate ($im, 255, 255, 255); //生成背景色
$frameColor = imageColorAllocate($im, 150, 150, 150); //生成边框色
$font = './system/fonts/arial.ttf'; //提取字体文件,开始写字
for($i = 0; $i < $length; $i++) {
$charY = ($height+9)/2 + rand(-1,1); //定义字符Y坐标
$charX = $i*15+8; //定义字符X坐标
//生成字符颜色
$text_color = imagecolorallocate($im, mt_rand(50, 200), mt_rand(50, 128), mt_rand(50, 200));
$angle = rand(-20,20); //生成字符角度
//写入字符
imageTTFText($im, $fontSize, $angle, $charX, $charY, $text_color, $font, $strNum[$i]);
}
for($i=0; $i <= 5; $i++) { //循环画背景线
$linecolor = imagecolorallocate($im, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
$linex = mt_rand(1, $width-1);
$liney = mt_rand(1, $height-1);
imageline($im, $linex, $liney, $linex + mt_rand(0, 4) - 2, $liney + mt_rand(0, 4) - 2, $linecolor);
}
for($i=0; $i <= 32; $i++) { //循环画背景点,生成麻点效果
$pointcolor = imagecolorallocate($im, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
imagesetpixel($im, mt_rand(1, $width-1), mt_rand(1, $height-1), $pointcolor);
}
imagerectangle($im, 0, 0, $width-1 , $height-1 , $frameColor); //画边框
//ob_clean();
//header('Content-type: image/png');
imagepng($im);
imagedestroy($im);
}
?>
然后把这个文件放在helper下,然后调用时可以这样:
$this->load->helper('captcha');
code();
第三种方法,更详细,老外的,请这个连接:
http://www.okadadesign.no/blog/codeigniter/how-to-use-codeigniter-captcha-plug-in/
加载辅助函数
用下面的代码加载验证码辅助函数:
$this->load->helper('captcha');
可用的函数如下:
captcha_create($data)
根据你指定的一系列参数创建验证码图像, 返回值是一个包含此图像数据的数组.
[array]
(
'image' => IMAGE TAG
'time' => TIMESTAMP (毫秒)
'word' => CAPTCHA WORD
)
"image"是实际存在image标记:
<img src="http://example.com/captcha/12345.jpg" width="140" height="50" />
这里的"time"是一个毫秒级的时间戳,作为图片文件名(不包含扩展名). 就像这样: 1139612155.3422
"word"是验证码, 如果不提供, 将是一个随机字符串.
使用验证码辅助函数:
加载后你可以向这样产生一个验证码:
$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'];
验证码辅助函数必须需要GD库.
只有 img_path 和 img_url 参数是必须的.
如果"word"未提供, 将自动产生一个ASCII字符串. 你也可以使用自己的词库,从里面随机挑选.
如果未提供TRUE TYPE字体的路径, 将会使用GD自带的字体.
"captcha" 目录必须可写(666, or 777)
"expiration" (秒) 指定了验证码图片的超时删除时间. 默认是2小时.
配合数据库
为了在提交表单时用到验证,你需要将create_captcha()生成的结果保存到数据库。这样,当用户提交表单时,你就可以验证数据库里是否有此验证码或是否过期。
这是一个数据表的例子:
CREATE TABLE captcha (
captcha_id bigint(13) unsigned NOT NULL auto_increment,
captcha_time int(10) unsigned NOT NULL,
ip_address varchar(16) default '0' 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 '提交下面的验证码:';
echo $cap['image'];
echo '<input type="text" name="captcha" value="" />';
然后页面提交后如下处理:
// 首先删除旧的验证码
$expiration = time()-7200; // 2小时限制
$this->db->query("DELETE FROM captcha WHERE captcha_time < ".$expiration);
// 然后再看是否有验证码存在:
$sql = "SELECT COUNT(*) AS count FROM captcha WHERE word = ? AND ip_address = ? AND date > ?";
$binds = array($_POST['captcha'], $this->input->ip_address(), $expiration);
$query = $this->db->query($sql, $binds);
$row = $query->row();
if ($row->count == 0)
{
echo "你必须提交图像上显示的验证码";
}
第一种做法时,提交时,也验证验证码是否过期,比较严格, 然后是第2种做法,自己简单定义一个,比如captha.php,代码如下:
?php
session_start();
//登录验证码
function GetVerify($length)
{
$strings = Array('3','4','5','6','7','a','b','c','d','e','f','h','i','j','k','m','n','p','r','s','t','u','v','w','x','y');
$chrNum = "";
$count = count($strings);
for ($i = 1; $i <= $length; $i++) { //循环随机取字符生成字符串
$chrNum .= $strings[rand(0,$count-1)];
}
return $chrNum;
}
function code(){
$fontSize = 20; //定义字体大小
$length = 5; //定义字符串长度
$strNum = GetVerify($length); //获取一个随机字符串
$_SESSION['verify'] = $strNum; //付值给session
$width = 90; //定义图片宽度
$height = 30; //定义图片高度
$im = imagecreate($width,$height); //生成一张指定宽高的图片
$backgroundcolor = imagecolorallocate ($im, 255, 255, 255); //生成背景色
$frameColor = imageColorAllocate($im, 150, 150, 150); //生成边框色
$font = './system/fonts/arial.ttf'; //提取字体文件,开始写字
for($i = 0; $i < $length; $i++) {
$charY = ($height+9)/2 + rand(-1,1); //定义字符Y坐标
$charX = $i*15+8; //定义字符X坐标
//生成字符颜色
$text_color = imagecolorallocate($im, mt_rand(50, 200), mt_rand(50, 128), mt_rand(50, 200));
$angle = rand(-20,20); //生成字符角度
//写入字符
imageTTFText($im, $fontSize, $angle, $charX, $charY, $text_color, $font, $strNum[$i]);
}
for($i=0; $i <= 5; $i++) { //循环画背景线
$linecolor = imagecolorallocate($im, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
$linex = mt_rand(1, $width-1);
$liney = mt_rand(1, $height-1);
imageline($im, $linex, $liney, $linex + mt_rand(0, 4) - 2, $liney + mt_rand(0, 4) - 2, $linecolor);
}
for($i=0; $i <= 32; $i++) { //循环画背景点,生成麻点效果
$pointcolor = imagecolorallocate($im, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
imagesetpixel($im, mt_rand(1, $width-1), mt_rand(1, $height-1), $pointcolor);
}
imagerectangle($im, 0, 0, $width-1 , $height-1 , $frameColor); //画边框
//ob_clean();
//header('Content-type: image/png');
imagepng($im);
imagedestroy($im);
}
?>
然后把这个文件放在helper下,然后调用时可以这样:
$this->load->helper('captcha');
code();
第三种方法,更详细,老外的,请这个连接:
http://www.okadadesign.no/blog/codeigniter/how-to-use-codeigniter-captcha-plug-in/
发表评论
-
11个php日常用的小tips 代码片段
2014-01-21 20:34 1930http://www.phpzag.com/11-useful ... -
php中的DirectoryIterator和RecursiveDirectoryIterator
2013-07-27 22:50 3512php中,可以用用DirectoryIterator获取指定目 ... -
uccenter中找回创始人密码
2013-03-11 19:12 1917偶然忘记了uccenter中的创始人密码,一查看,其实找回 ... -
php中通过register_shutdown_function记录fatal error
2013-02-09 23:56 2965今天发现php中,如果要记录fatal error的时候, ... -
php中检查是否ajax请求
2013-01-19 09:53 1468$ajax = false; if(!empty ... -
php中检查某个网页地址是否有效能被打开的最简单方法
2012-10-22 16:18 2090php中检查某个网页地址是否有效能被打开的最简单方法,其实可以 ... -
小结几个php操作office的类库
2012-07-20 19:16 19371 phpexcel 最强大完整的类库了,地址在: ht ... -
介绍几个PHP的开源不错的图片类库
2012-07-14 13:11 2880介绍几个PHP的开源不错的图片类库 1 pchart ... -
php中__sleep和__wakeup
2012-06-22 09:39 4520在php中,__sleep和___wakeup是两个分别自 ... -
PHP 5.4正式版重要新特性
2012-05-25 08:34 1673原文发表在:http://tech.it168.com/a20 ... -
用php实现备份数据库ZIP及导出
2012-04-17 08:59 1842经常在有的PHP开源系统中,看到有备份数据库并导出的方法 ... -
PHP Codeigniter 中的_remap方法简介
2012-04-05 21:06 4584在Codeigniter 中,其实有个容易忽略掉的不错的控 ... -
PHP 5.4中的traits初探
2012-04-01 19:57 5050PHP 5.4中的traits,是新引入的特性,中文还真不知道 ... -
php中的pdo和mysqli的对比选择
2012-03-10 22:25 7151在PHP中,如何选择PDO和mysqli呢?本文做个简单的 ... -
php 5.4中新增加对session状态判断的功能
2012-02-20 12:28 3967在以前的php 版本中,要判断session是否有效,只能 ... -
php curl的几段小应用
2012-02-07 10:10 1823php 的CURL是不错的功能,下面收藏几段不错的片段 1 ... -
php 5.3中的一个type hinting的用法
2012-01-20 11:50 2315今天偶然看php 5.3中的一个特性,叫type hintin ... -
cakephp的分页排序
2012-01-04 10:38 4227cakephp中的分页还是很简单的,下面例子复习下 1 数据 ... -
mongodb+php学习1
2012-01-03 11:51 52281 mongodb启动时,设置启动项 C:\>mon ... -
php中挺好用的strtotime方法
2011-12-20 11:32 1960在PHP中,经常要对日期进行计算,比如要计算一个月前的日期 ...
相关推荐
在CodeIgniter中,验证码(CAPTCHA)是一个重要的安全功能,它帮助防止自动机器人或恶意用户通过表单提交进行欺诈行为。验证码通常是一串随机的字符,用户需要输入相同的字符才能完成验证,以此确保操作是由人类执行...
Codeigniter-Console 一个CodeIgniter 3.x框架控制台。 安装 "require-dev" : { "webwizo/codeigniter-console" : "dev-master" } 入门 如果您成功安装了CodeIgniter,请运行以下命令: vendor/bin/codeigniter ...
在CodeIgniter中,可以使用第三方库如`Tank_auth`或者自己编写验证码生成和验证逻辑。生成的验证码会显示在页面上,用户需要输入并与服务器端进行匹配验证。 数据库操作是Web应用的核心部分。CodeIgniter的Active ...
CodeIgniter 4 应用启动器什么是 CodeIgniter? CodeIgniter是一个PHP的完整堆栈Web框架,它轻巧,快速,灵活且安全。 更多信息可以在找到。 这个存储库包含一个 Composer 可安装的应用程序启动器。 它是从构建的。 ...
这个"CodeIgniter 1.72 中文帮助文档"是针对该框架的一个详细指南,旨在帮助开发者更好地理解和使用CodeIgniter 1.72版本。 1. **CodeIgniter简介** CodeIgniter以其简洁的架构、出色的性能和丰富的库而闻名。它...
如果你已经是一位 PHPer,开发过 PHP 应用,CodeIgniter 将会帮助你做得更好,更容易达成目标。CI 会减少你的代码量。你的脚本可读性也会更好,更容易升级。它会使你的网站结构更紧凑,代码更强健,如果没有很好地...
RepositórioOficial do Livro CodeIgniter 4 ... Cbiçãode bibliotecas e帮助程序(libs_helpers) 有效形式(form_validation) 上传de Arquivos(upload_files) 图像处理(image_manipulat
CodeIgniter 4开发 什么是CodeIgniter? CodeIgniter是一个PHP完整堆栈的Web框架,它轻巧,快速,灵活且安全。 可以在找到更多信息。 该存储库仅保存CodeIgniter 4的源代码。 对版本4进行了完整的重写,以将质量和...
1、CodeIgniter:php敏捷开发框架 2、CodeIgniter 1.7.1 用户指南 本书详细讲解了 CI 的一些主要特性。本书并不包含 CI 的所有内容和全部细节。CI 有一本出色的在线《用户指南》,它详细讲解了大多数的内容。它可以...
CodeIgniter 4.1 是一个流行的开源 PHP 框架,用于快速开发高效、可扩展的Web应用程序。...随着对CodeIgniter 4的深入学习,你会发现它是一个强大而灵活的工具,能够帮助你快速构建高质量的PHP Web应用。
在CodeIgniter中,模型类用来与数据库交互,执行查询和数据操作。 2. **视图(View)**:视图是用户看到并与其交互的界面。它们通常包含HTML、CSS和JavaScript,不过在CodeIgniter中,视图文件仅包含HTML结构,其他...
这篇博文(https://baiyuxiong.iteye.com/blog/815247)可能介绍了一个专为CodeIgniter设计的无限分类类库,帮助开发者轻松处理复杂的分类关系。这个类库可能包括了创建、读取、更新和删除分类的功能,并且能有效地...
CodeIgniter内置的表单验证类可以帮助开发者轻松实现用户输入的验证,防止无效数据进入系统。 10. **错误处理与日志记录**: CodeIgniter提供了一套完善的错误处理机制,包括错误报告级别设置和日志记录,有助于...
`CodeIgniterMigration` 就是为了帮助开发者将现有的 CodeIgniter 项目无缝迁移到 Laravel 5 而设计的包。这个包的主要目标是兼容和集成已经启动的 CodeIgniter 会话系统,以便在切换到 Laravel 后,应用程序的会话...
5. **表单验证**:CodeIgniter内置的表单验证类可以帮助开发者验证用户提交的数据,确保数据的安全性和完整性,防止SQL注入和跨站脚本攻击。 6. **会话管理**:框架提供了一套会话管理工具,用于跟踪用户状态,如...
11. 布景类(Benchmarking):CodeIgniter的布景类提供性能测试功能,可以帮助开发者分析代码性能瓶颈。 12. 载入类(Loader):载入类负责加载框架的各种组件,如模型、库、助手函数、视图等。开发者可以使用`$this->...
什么是 CodeIgniter CodeIgniter 是一个应用程序开发框架——一个工具包——适用于使用 PHP 构建网站的人。 它的目标是通过为常用任务提供一组丰富的库,以及访问这些库的简单接口和逻辑结构,使您能够比从头开始...
Vign的Codeigniter 4片段 该扩展提供了Codeigniter 4片段 要求 CodeIgniter Version : 4.1.1 安装 启动代码的命令面板 ext install adereksisusanto.codeigniter4-snippets 表中的内容 [新] [新] 路线的替代片段 ...
Codeigniter Grid 使用方法 (flexigrid) 博客分类: Codeigniter / CakePHP ASPRailsRubyPHPGoogle 来源:http://codeigniter.com/forums/viewthread/75326/P0/ Updated: 6 September 2008 Although I love CI, ...
CodeIgniter使您可以最大限度地减少给定任务所需的代码量,从而创造性地专注于您的项目。发布信息此存储库包含将来版本的开发中代码。 要下载最新的稳定版本,请访问页面。变更日志和新功能您可以在 找到每个版本的...