ThinkPHP5.1需通过think-captcha扩展实现验证码,分安装、配置显示、生成图像、后端校验四步;关键点为Session存储比对、前端可刷新交互及参数灵活控制。

ThinkPHP5.1 本身不内置验证码功能,需通过 think-captcha 扩展包实现。整个过程分四步:安装扩展、配置显示、生成图像、后端校验。关键点在于 Session 存储与比对、前端可刷新交互、以及参数灵活控制。
安装 think-captcha 扩展包
在项目根目录执行 Composer 命令:
-
composer require topthink/think-captcha=2.0.*(推荐指定 2.0 版本,兼容性更稳) - 安装成功后,扩展位于
vendor/topthink/think-captcha - 确保 PHP 已启用 GD 库(
extension_loaded('gd')返回 true),否则无法生成图片
在模板中显示可点击刷新的验证码
直接使用助手函数即可渲染,默认带点击刷新逻辑(需确保 helper.php 中的 captcha_img() 已优化):
- 基础写法:
<div>{:captcha_img()}</div> - 或手动控制 src:
<img src="%7B:captcha_src()%7D" alt="验证码" title="点击更换" onclick="this.src='{:captcha_src()}?'+Math.random()"> - 若页面含多个验证码,需传入唯一
$id,如{:captcha_img('login')},后端校验时也需对应
后端生成与自定义配置
无需单独写“验证码接口”,captcha_img() 内部已自动调用 captcha_src(),但你也可以显式定义一个控制器方法用于调试或特殊路由:
立即学习“PHP免费学习笔记(深入)”;
- 在控制器中引入:
use think\captcha\Captcha; - 定义方法示例:
{
$config = [
'fontSize' => 24,
'length' => 4,
'imageW' => 180,
'imageH' => 60,
'useNoise' => false,
'useCurve' => true
];
$captcha = new Captcha($config);
return $captcha->entry();
}
- 模板中引用:
<img src="%7B:url('index/verify')%7D" alt="验证码"> - 配置也可统一写入
config/captcha.php文件,避免重复传参
提交时验证用户输入是否正确
有两种常用方式,推荐使用框架验证规则,简洁且统一:
- 方式一:使用 validate 规则(推荐)
$this->validate($data, ['captcha|验证码' => 'require|captcha']); - 方式二:手动调用校验函数
if (!captcha_check(input('post.captcha'), 'login')) { $this->error('验证码错误'); }(第二个参数需与前端captcha_img('login')的 id 一致) - 注意:校验失败不会自动清除 Session 中的验证码,如需单次有效,可在校验后调用
captcha_clear()



















