thinkphp8验证码需通过topthink/think-captcha扩展实现,必须手动创建config/captcha.php并配置length、usenoise、usecurve、fontsize、bg、expire等基础项,推荐精简codeset、启用api模式及检查gd/openssl扩展和session中间件。

ThinkPHP8的验证码不是内置功能,必须通过 topthink/think-captcha 扩展实现,其生成参数统一在 config/captcha.php 中配置。这个文件不会自动生成,需手动创建并填入合理值,否则会报错或生成失败。
必须手动创建并填写 captcha.php
在项目 config/ 目录下新建 captcha.php 文件,内容至少包含以下基础项:
-
length:验证码字符长度,推荐设为
4(太短易暴力,太长影响体验) -
useNoise:是否启用噪点干扰,建议设为
true -
useCurve:是否启用扭曲曲线,建议设为
true(防OCR识别) -
fontSize:字体大小,推荐
25左右,太小难辨,太大易溢出 -
bg:背景色,必须是 RGB 数组格式,如
[245, 245, 245],不能写十六进制字符串 -
expire:缓存过期时间(秒),默认
1800(30分钟),API 场景建议调至300(5分钟)
增强安全性的关键配置项
默认配置容易被自动化工具识别,建议在 captcha.php 中主动调整:
-
codeSet:精简字符集,剔除易混淆字符,例如:
'23456789ABCDEFGHJKLMNPQRSTUVWXYZ'(去掉0/O、1/I/l) -
useZh:如需中文验证码,设为
true,同时必须配置:
•zhset:指定中文词组,如'登录|验证|安全|防刷'
•fontttf:指向真实存在的中文字体路径,如__DIR__ . '/../public/fonts/simhei.ttf' -
imageW / imageH:可显式设定宽高(单位像素),避免自适应导致布局错乱;若留
0则自动计算
API 模式专用配置
前后端分离项目必须启用 API 模式,否则无法返回 base64 图片:
- 设置
'api' => true,此时Captcha::create()返回数组而非图片流 - 禁用
useImgBg(该参数在新版扩展中已废弃,勿使用) - 确保
url参数为空或为相对路径,HTTPS 站点避免混合内容拦截
配置生效前的必要检查
参数写对了,但验证码仍不显示?请确认以下三点已到位:
- PHP 已启用
gd和openssl扩展(php -m | grep -E 'gd|openssl'验证) -
app/middleware.php中已启用\think\middleware\SessionInit::class - 执行过
php think captcha:install(虽非强制,但可同步生成前端资源和默认配置)
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











