ThinkPHP5.1验证码正常显示和校验需完成四步:安装think-captcha扩展、启用Session中间件、配置GET验证码路由、模板中正确调用captcha_img()或url()渲染,缺一不可,否则页面空白或check()恒返回false。

ThinkPHP5.1项目中要让验证码正常显示和校验,必须完成扩展安装、Session启用、路由绑定、模板调用四步连贯配置,缺一不可,否则页面空白或check()恒返回false。
安装think-captcha扩展包
进入项目根目录(含composer.json),执行命令:
composer require topthink/think-captcha=2.0.*
安装完成后检查vendor/topthink/目录下是否存在think-captcha文件夹。若使用国内源可先执行composer config -g repo.packagist composer https://packagist.laravel-china.org加速安装。
启用Session中间件
打开app/middleware.php文件,确认\think\middleware\SessionInit::class已取消注释;TP6默认注释掉此项,TP5.1虽未默认注释但部分模板项目会手动关闭——【若此处未启用,后续所有验证码操作均失效】。
验证Session是否生效:在任意控制器方法中写session('test', 'ok'); var_dump(session('test'));,输出string(2) "ok"才算通过。
配置验证码路由
推荐在route/route.php中添加显式路由:
Route::get('captcha', [\think\captcha\facade\Captcha::class, 'create']);
该路由必须为GET方法,且不能在对应方法中echo/print/var_dump任何内容——哪怕一个空格或换行都会破坏图像二进制流,导致浏览器显示“无法加载图像”。
若采用控制器方式生成,需确保方法仅返回$captcha->entry()结果,且控制器前无布局模板、无前置输出。
在模板中渲染验证码
方法一:直接使用助手函数
{:captcha_img()}
方法二:手动拼接img标签
注意:{:captcha_img()}内部已自动添加onclick刷新逻辑,但部分版本helper.php中onclick属性名被错误转义为οnclick(带希腊字母omicron),如遇点击无效,请手动将οnclick改为onclick。
配置多实例与参数
第一步:在config/extra/目录下新建captcha.php文件
第二步:填入配置数组,例如:
return [
'fontSize' => 28,
'length' => 4,
'useNoise' => false,
'useCurve' => true,
'codeSet' => '23456789ABCDEFGHJKLMNPQRSTUVWXYZ'
];
第三步:若需同一页面多个验证码,在模板中调用{:captcha_img('login')}和{:captcha_img('reg')},后端校验时传入对应id:captcha_check($input, 'login')。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











