ThinkPHP 5.1 验证码和消息队列需通过 Composer 单独安装扩展包;验证码依赖启用 Session 中间件并正确配置,模板用 {:captcha_img()} 渲染;消息队列支持 Redis、Database 和 Sync 三种驱动,校验与入队需严格按规范调用。

ThinkPHP 5.1 手册本身不包含验证码和消息队列功能,这两个模块必须通过 Composer 单独安装扩展包才能使用,直接调用会报错或返回空值。
安装并启用验证码扩展
第一步:在项目根目录执行命令安装扩展包
composer require topthink/think-captcha=2.0.*
第二步:确认 Session 中间件已启用
打开 app/middleware.php 文件,检查 【 hinkmiddlewareSessionInit::class】 是否在数组中且未被注释;TP6 默认注释掉该行,TP5.1 需手动取消注释。
第三步:验证 Session 是否真正生效
在任意控制器方法中写入 session('test', 'ok'); var_dump(session('test'));,若输出 string(2) "ok" 才算通过;否则验证码图像生成与校验均会失败。
立即学习“PHP免费学习笔记(深入)”;
第四步:生成验证码图像
模板中直接写 {:captcha_img()},框架自动渲染带时间戳的 img 标签;不要手动 new Captcha()->create() 后 return,容易因响应头污染导致图片损坏。
配置并使用消息队列扩展
方法一:安装并配置 Redis 驱动
执行 composer require topthink/think-queue,然后在 application/extra/queue.php 中填写 Redis 连接参数,确保 【'connector' => 'Redis'】 且 host、port、password 正确。
方法二:数据库驱动替代方案
若无 Redis 环境,可将 connector 改为 Database,并在配置中指定表名 jobs(需提前建好该数据表),但性能和并发能力明显弱于 Redis。
方法三:同步驱动用于调试
设置 'connector' => 'Sync' 可绕过队列机制,让任务立即执行,适合开发阶段快速验证逻辑是否正确,但上线前必须切换回 Redis 或 Database。
验证码校验与队列入队实操
第一步:前端提交验证码字段 name="captcha"
后端接收时调用 captcha_check(input('post.captcha')),返回 true 或 false,不可用 $captcha->check() 混用对象与函数方式。
第二步:多验证码场景需加 ID 标识
模板中 {:captcha_img('login')} → 控制器中 captcha_check(input('post.captcha'), 'login'),否则多个验证码共用同一 Session 键导致校验混乱。
第三步:构造队列任务并推入
定义任务类如 applicationindexjobSendSms,在控制器中调用 Queue::push('application\index\job\SendSms@fire', ['phone' => '138xxxx'], 'sms'); 注意类名必须是完整命名空间字符串,且 fire 方法必须为 public。
第四步:启动消费者监听队列
命令行执行 php think queue:listen,进程将持续运行;若用 supervisor 管理,需确保其工作目录为项目根目录,否则 autoload 失效。



















