ThinkPHP验证码需三步:安装think-captcha扩展、启用Session中间件、用{:captcha_img()}显示;缺一导致空白或校验失败。

ThinkPHP 验证码不是装完框架就能用的功能,必须手动补上扩展、配好 Session、再调用正确方法,三步缺一不可。跳过任一环节,轻则图片空白,重则始终校验失败。
安装 think-captcha 扩展包
从 ThinkPHP 5.1 起,验证码已移出核心,需用 Composer 单独安装:
- 执行命令:
composer require topthink/think-captcha - 安装成功后,项目会自动在
config/目录下生成captcha.php配置文件(若无,可手动创建) - 该扩展强依赖 PHP 的 GD 图像处理库,请确认已启用(
php -m | grep gd)
启用 Session 中间件
验证码值靠 Session 存储,Session 不启动,create() 返回空图,check() 永远 false:
- 打开
app/middleware.php,取消注释这行:\think\middleware\SessionInit::class - 不要在控制器里写
session_start()—— 框架只认中间件初始化的 Session - 快速验证是否生效:在任意控制器方法中写
session('test', 'ok'); var_dump(session('test'));,输出string(2) "ok"即为正常
生成并显示第一个验证码
不建议在控制器中直接 return (new Captcha())->create(),易因输出顺序导致图像损坏:
立即学习“PHP免费学习笔记(深入)”;
- 推荐方式:在模板中直接使用助手函数
{:captcha_img()},它会自动生成带随机参数的<img src="/captcha?_=xxx"> - 如需自定义路由,添加一条 GET 路由:
Route::get('captcha', [\think\captcha\facade\Captcha::class, 'create']); - 浏览器访问
/captcha能看到图片,说明后端已通;若为空白或报错,优先检查 Session 和 GD 库
到这一步,你已经成功跑通了验证码的“出生”流程。后续校验、配置调整、防刷优化,都是在此基础上延伸。



















