thinkphp验证码需安装对应版本的topthink/think-captcha包,执行php think captcha:install发布资源,并确保session启用;模板用{:captcha_img()}显示,控制器用captcha_check($code)验证。

ThinkPHP 验证码功能依赖 topthink/think-captcha 扩展包,不能直接用框架自带类,必须通过 Composer 安装并完成初始化。关键不在“装没装”,而在“版本对不对、资源发没发、Session 开没开”。
确认 ThinkPHP 版本再选包版本
不同主版本对应不同验证码包分支,混用必报错:
- ThinkPHP 5.0 → 必须用
composer require topthink/think-captcha=1.* - ThinkPHP 5.1 → 应用
=2.*(如composer require topthink/think-captcha=2.*) - ThinkPHP 6.x / 7.x / 8.x → 直接
composer require topthink/think-captcha(自动拉取兼容最新版)
查版本方法:运行 php think version 或打开 thinkphp/library/think/Env.php 查 VERSION 常量。
安装后必须运行安装命令发布资源
仅 composer require 不够,扩展包不会自动复制前端 JS/CSS 和配置文件。需在项目根目录执行:
php think captcha:install
执行后检查两个位置是否生成:
-
config/captcha.php—— 配置文件(可按需修改位数、过期时间、字体等) -
public/static/captcha/—— 含captcha.js、captcha.css和images/目录
确保 Session 已启用
验证码本质是服务端存 session + 前端比对,Session 不工作,验证码必然失效:
- TP6/TP8:确认
app/middleware.php中已注册\think\middleware\SessionInit::class - TP5.1:检查
application/tags.php的action_begin数组是否含\think\middleware\Session::class - TP5.0:确认
application/config.php中'session_on' => true
测试方法:在控制器中写 session('test', 'ok'); dump(session('test'));,能输出 'ok' 即正常。
模板中显示与后端验证写法
视图里用助手函数最简:
<div>{:captcha_img()}</div> —— 输出完整 <img> 标签<img src="%7B:captcha_src()%7D" onclick="this.src='{:captcha_src()}?'+Math.random()"> —— 支持点击刷新
控制器中验证方式二选一:
- 面向对象:
$captcha = new \think\captcha\Captcha(); $captcha->check($code) - 助手函数:
captcha_check($code)(更简洁,推荐)
注意:$code 来自表单提交的字段值,区分大小写,且校验一次即失效。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











