ThinkPHP 3.1快速入门:验证码

在这个网络安全漫天飞的年代,验证码功能起码能算是一个值得信赖的好卫兵了。本篇我们就来讲下如何在ThinkPHP中使用验证码功能。

获取扩展类库

ThinkPHP的扩展中由图像处理类Image以及用于生成随机验证码的字符处理类String共同完成验证码功能,可以在在http://www.thinkphp.cn/extend/225.html下载图像处理类以及http://www.thinkphp.cn/extend/266.html下载字符处理类,或者下载官方的完整扩展包(http://www.thinkphp.cn/down/253.html)里面也已经包含以上扩展类了。如果是单独下载的扩展类库,把解压后的Image.class.php和String.class.php 一起放入ThinkPHP/Extend/Library/ORG/Util/(如果没有请手动创建)目录下面。由于验证码显示采用了GD库支持,所以需要环境支持GD库。

生成验证码

生成验证码其实很简单,只需要在你的Action中添加操作方法,一般为了避免受权限控制的影响,我们通常把这个方法放到公共Action或者无需授权就能访问的控制器(例如PublicAction)中,下面我们以放到PublicAction控制器类中为例,代码如下:

class PublicAction extends Action{      Public 
function verify(){          import('ORG.Util.Image');          Image::buildImageVerify();      }  } 

定义后,我们可以在任何需要验证码的模块中调用Public模块的verify方法来显示验证码,需要做的仅仅是在需要的模板中添加如下调用代码:

<img src='__APP__/Public/verify/' /> 

这样,我们访问该页面后就能看到默认的验证码图像显示,如下所示:

如果你的验证码不能正常显示,请检查:

是否已经安装GD库支持并正常开启;

Image类库以及String类库是否在正确的位置以及是否正确导入;

验证码输出之前是否有任何的其他输出(尤其是UTF8的BOM头信息输出);

很多开发人员验证码无法显示的情况多数是由于文件中有输出或者BOM头的情况,关于UTF8的BOM头检测有工具可以检测,很多编辑器也支持去掉BOM保存(这个不清楚的话可以百度下)。这里要另外强调下很多开发人员在书写代码的时候不够规范,例如经常会有下面的情形发生:
在文件的开头有空行

在文件的尾部有空行

以上两种情况都会导致页面的其他输出,从而导致验证码出错。

时间: 2024-08-08 04:21:50

ThinkPHP 3.1快速入门:验证码的相关文章

ThinkPHP 3.1快速入门:连贯操作

上一篇我们详细描述了查询语言的用法,但是查询语言仅仅解决了查询或者操作条件的问题,更多的配合还需要使用模型提供的连贯操作方法. 介绍 连贯操作可以有效的提高数据存取的代码清晰度和开发效率,并且支持所有的CURD操作,也是ThinkPHP的ORM中的一个亮点.使用也比较简单, 假如我们现在要查询一个User表的满足状态为1的前10条记录,并希望按照用户的创建时间排序 ,代码如下: $User->where('status=1')->order('create_time')->limit(1

ThinkPHP 3.1快速入门:基础

ThinkPHP是一个快速.简单的基于MVC和面向对象的轻量级PHP开发框架,遵循Apache2开源协议发布,从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,尤其注重开发体验和易用性,并且拥有众多的原创功能和特性,为WEB应用开发提供了强有力的支持. 目录结构 ThinkPHP最新版本可以在官方网站(http://thinkphp.cn/down/framework.html)或者Github(https://github.com/liu21st/thinkphp/do

ThinkPHP 3.1快速入门:自动验证

自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证. 验证规则 数据验证可以进行http://www.aliyun.com/zixun/aggregation/18278.html">数据类型.业务规则.安全判断等方面的验证操作.数据验证有两种方式:静态方式:在模型类里面通过$_validate属性定义验证规则.动态方式:使用模型类的validate方法动态创建自动验证规则.无论是什么方式,验证规则的定义是统一的规则,定义格式为

ThinkPHP 3.1快速入门:查询语言

上一篇中我们掌握了基本的数据CURD方法,但更多的情况下面,由于业务逻辑的差异,CURD操作往往不是那么简单,尤其是复杂的业务逻辑下面,这也是ActiveRecord模式的不足之处.ThinkPHP的查询语言配合连贯操作可以很好解决复杂的业务逻辑需求,本篇我们就首先来深入了解下框架的查询语言. 介绍 ThinkPHP内置了非常灵活的查询方法,可以快速的进行数据查询操作,查询条件可以用于读取.更新和删除等操作,主要涉及到where方法等连贯操作即可,无论是采用什么数据库,你几乎采用一样的查询方法(

ThinkPHP 3.1快速入门:变量输出

在上一章我们了解了如何通过assign方法把变量赋值到模板变量,这一篇我们来详细了解下如何在模板中使用标签输出模板变量.注意,本篇的描述仅针对使用内部模板引擎的情况,如果你使用了Smarty或者其他模板引擎,请参考其相关的变量输出语法. 变量输出 变量输出的方法很简单,例如,在控制器中我们给模板变量赋值: $http://www.aliyun.com/zixun/aggregation/11696.html">name = ' ThinkPHP';$this->assign('nam

ThinkPHP 3.1快速入门:IP地址定位

在WEB应用中,根据IP地址定位和记录相关访问日志也是非常常见的需求,在ThinkPHP中你可以轻松的实现IP地址获取和定位. 获取扩展类库 可以在官网的http://www.thinkphp.cn/extend/223.html下载IP定位扩展类库,或者下载扩展包(http://www.thinkphp.cn/down/253.html)里面也已经包含该扩展类了.如果是单独下载的上传类库,把解压后的IpLocation.class.php 放入ThinkPHP/Extend/Library/O

ThinkPHP 3.1快速入门:数据分页

我们已经了解了如何进行数据查询,今天我们来学习下如何对数据进行分页以及显示. 获取分页类 ThinkPHP提供了数据分页的扩展类库Page,可以在http://www.thinkphp.cn/extend/241.html下载,或者下载官方的完整扩展包(http://www.thinkphp.cn/down/253.html)里面也已经包含分页扩展类了.把解压后的Page.class.php放入ThinkPHP/Extend/Library/ORG/Util/(如果没有请手动创建)目录下面.当然

ThinkPHP 3.1快速入门:自动完成

自动完成是ThinkPHP提供用来完成数据http://www.aliyun.com/zixun/aggregation/18860.html">自动处理和过滤的方法,使用create方法创建数据对象的时候会自动完成数据处理.因此,在ThinkPHP使用create方法来创建数据对象是更加安全的方式,而不是直接通过add或者save方法实现数据写入. 规则定义 自动完成通常用来完成默认字段写入,安全字段过滤以及业务逻辑的自动处理等,和自动验证的定义方式类似,自动完成的定义也支持静态定义和动

ThinkPHP 3.1快速入门:命名范围

在应用http://www.aliyun.com/zixun/aggregation/17799.html">开发过程中,使用最多的操作还是数据查询操作,凭借ThinkPHP的连贯操作的特性,可以使得查询操作变得更优雅和清晰,然而新版的命名范围功能,则是给模型操作定义了一系列的查询封装,让你更方便的查询数据. 定义属性 要使用命名范围功能,主要涉及到模型类的_scope属性定义和scope连贯操作方法的使用.我们首先定义_scope属性: class NewsModel extends M