ThinkPHP 8.0 验证码需通过 topthink/think-captcha 扩展实现,依赖 config/captcha.php 配置、Session 启用及 GD 支持;核心参数包括 length、fontSize、useCurve、useNoise、imageH/W、bg、codeSet 及 ttf 字体路径;多实例通过 ID 隔离,支持独立配置与校验。

生成配置文件
运行命令触发安装脚本,自动生成默认配置:
php think captcha:install
执行后会在 config/captcha.php 生成完整配置数组。若该文件不存在,后续所有参数设置均不会生效。
核心可调参数说明
打开 config/captcha.php,重点关注以下几项:
修复 Core bailout 状态损坏安全问题,以及 BZ2、DOM、PDO、Opcache/JIT 内存与执行错误,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
立即学习“PHP免费学习笔记(深入)”;
- length:验证码字符长度,默认为 4;可设为 5 或 6 提升安全性
- fontSize:字体大小(像素),建议 16–24,过小影响识别,过大易溢出
- useCurve:是否启用干扰曲线,默认 true;设为 false 可降低识别难度(测试用)
- useNoise:是否启用噪点,默认 true;生产环境建议保留以增加防刷强度
- imageH / imageW:图片高宽,默认 40×130;按需调整,但需同步检查 public/static/captcha/ 下 CSS 中的尺寸适配
-
bg:背景色,格式为 RGB 数组,如
[255, 255, 255]表示白色背景 -
codeSet:字符集,默认
'23456789ABCDEFGHJKLMNPQRTUVWXY'(剔除易混淆字符);如需支持中文,需额外指定中文字体路径并确认 GD 支持 TrueType
字体与路径相关配置
若使用自定义字体(尤其中文),必须显式配置:
-
ttf:字体文件绝对路径,例如
__DIR__ . '/../public/fonts/simhei.ttf' - 确保该字体文件真实存在、PHP 进程有读取权限、且文件编码为 UTF-8 无 BOM
- GD 库需支持 FreeType,可通过
php -i | grep -i freetype验证
会话与校验行为控制
验证码依赖 Session 存储服务端 code 值,以下参数影响校验逻辑:
- expire:验证码有效期(秒),默认 1800(30 分钟);登录场景建议设为 600(10 分钟)
- reset:验证失败后是否重置验证码,默认 true;设为 false 可允许连续尝试同一码
- 注意:session 键名由框架内部固定为
captcha_' . $id,不可手动修改,否则captcha_check()失效
多实例与 ID 区分
一个项目可同时使用多个验证码(如登录页 + 忘记密码页),通过 $id 参数隔离:
- 模板中调用:
{:captcha_img('login')}和{:captcha_img('reset')} - 控制器中生成:
(new Captcha(['id' => 'login']))->create() - 校验时传入对应 ID:
captcha_check($verify, 'login') - 各 ID 的配置可独立覆盖,只需在
captcha.php中添加子数组:'login' => ['length' => 5, 'expire' => 600]


















