1.验证码生成使用verify
$verify = new 命名空间Verify();
$verify -> entry();
简单生成验证码
shop/Admin/Controller/ManagerController.class.php
程序代码如下:
//制作专门方法实现验证码生成
function verifyImg(){
//以下类Verify在之前并没有include引入,而是使用自动加载
//ThinkPHP/Library/Think/Think.class.php中的autoload()方法
$verify = new \Think\Verify();
//ThinkPHP/Library/Think/Verify.class.php命名空间为Think
//完全限定名称实例化
//实例化,走的是Verify里的构造方法__construct()
//show_bug($verify);
$verify -> entry();
}
运行http://localhost/ThinkPHP/shop/index.php/Admin/Manager/verifyImg
![运行效果](https://i-blog.csdnimg.cn/blog_migrate/3520a17f0b9b83a3152aabd247d4e885.jpeg)
验证码相关类解析
ThinkPHP/Library/Think/Think.class.php中的autoload()方法
程序代码如下:
/**
* 类库自动加载
* @param string $class 对象类名
* @return void
*/
public static function autoload($class) {
//1、show_bug($class);
//将输出以下信息:
//string(13) "Think\Storage"
//string(25) "Think\Storage\Driver\File"
//string(9) "Think\Log"
//string(30) "Behavior\ReadHtmlCacheBehavior"
//string(34) "Admin\Controller\ManagerController"
//string(12) "Think\Verify"
//string(30) "Behavior\ShowPageTraceBehavior"
//string(21) "Think\Log\Driver\File"
//即我们实例化验证码时$class=Think\Verify
// 检查是否存在映射
if(isset(self::$_map[$class])) {
include self::$_map[$class];
}elseif(false !== strpos($class,'\\')){
//2、
//strstr(Think\Verify, '\\'); 将返回Verify
//strstr(Think\Verify, '\\', true); 将返回Think
//上面中'\\'的第一个斜杠是转义符,所以生效的只有一个斜杠
//此时$name=Think
$name = strstr($class, '\\', true);
if(in_array($name,array('Think','Org','Behavior','Com','Vendor')) || is_dir(LIB_PATH.$name)){
// Library目录下面的命名空间自动定位
// 3、
// LIB_PATH= ThinkPHP/Library
$path = LIB_PATH;
}else{
// 检测自定义命名空间 否则就以模块为命名空间
$namespace = C('AUTOLOAD_NAMESPACE');
$path = isset($namespace[$name])? dirname($namespace[$name]).'/' : APP_PATH;
}
//4、
//$filename = ThinkPHP/Library/Think/Verify.class.php
$filename = $path . str_replace('\\', '/', $class) . EXT;
if(is_file($filename)) {
// Win环境下面严格区分大小写
if (IS_WIN && false === strpos(str_replace('/', '\\', realpath($filename)), $class . EXT)){
return ;
}
include $filename;
}
}elseif (!C('APP_USE_NAMESPACE')) {
// 自动加载的类库层
foreach(explode(',',C('APP_AUTOLOAD_LAYER')) as $layer){
if(substr($class,-strlen($layer))==$layer){
if(require_cache(MODULE_PATH.$layer.'/'.$class.EXT)) {
return ;
}
}
}
// 根据自动加载路径设置进行尝试搜索
foreach (explode(',',C('APP_AUTOLOAD_PATH')) as $path){
if(import($path.'.'.$class))
// 如果加载类成功则返回
return ;
}
}
}
ThinkPHP/Library/Think/Verify.class.php的构造方法__construct()
程序代码如下:
/**
* 架构方法 设置参数
* @access public
* @param array $config 配置参数
*/
//当前类中定义的$config作为参数传入
public function __construct($config=array()){
//与类中当前的属性config进行合并,最后传入$this->config
$this->config = array_merge($this->config, $config);
}
当前类有config属性如下:
protected $config = array(
'seKey' => 'ThinkPHP.CN', // 验证码加密密钥
'codeSet' => '2345678abcdefhijkmnpqrstuvwxyzABCDEFGHJKLMNPQRTUVWXY', // 验证码字符集合
'expire' => 1800, // 验证码过期时间(s)
'useZh' => false, // 使用中文验证码
'zhSet' => '们...休借', // 中文验证码字符串
'useImgBg' => false, // 使用背景图片
'fontSize' => 25, // 验证码字体大小(px)
'useCurve' => true, // 是否画混淆曲线
'useNoise' => true, // 是否添加杂点
'imageH' => 0, // 验证码图片高度
'imageW' => 0, // 验证码图片宽度
'length' => 5, // 验证码位数
'fontttf' => '', // 验证码字体,不设置随机获取
'bg' => array(243, 251, 254), // 背景颜色
'reset' => true, // 验证成功后是否重置
);
验证码个性化配置
shop/Admin/Controller/ManagerController.class.php
程序代码如下:
//制作专门方法实现验证码生成
function verifyImg(){
$config = array(
'fontSize' => 25, // 验证码字体大小(px)
'imageH' => 50, // 验证码图片高度
'imageW' => 250, // 验证码图片宽度
//ThinkPHP/Library/Think/Verify/ttfs
'fontttf' => '4.ttf', // 验证码字体,不设置随机获取
'length' => 5, // 验证码位数
);
//需要传入参数
$verify = new \Think\Verify($config);
$verify -> entry();
}
验证码在模板中使用
<img src="路由地址Manager/verifyImg" alt="">
shop/Ad