thinkphp 没有7.0版本,常见误将php 7.0当作tp7;主流版本为3.2(已停维)、5.1(需手动实现队列)、6.x(原生支持);tp5.1队列须用cli+mysql轮询或phpredis扩展配redis,禁用predis,且不可集成swoole以免与fpm冲突。

ThinkPHP 没有 7.0 版本,你实际安装的很可能是 PHP 7.0,而框架仍是 ThinkPHP 3.2 或 5.1 —— 这是常见混淆点,直接导致队列配置失败。
确认你用的是哪个 ThinkPHP 版本
ThinkPHP 官方从未发布过 7.0 版本。当前主流稳定版是:
- ThinkPHP 3.2(对应 PHP 5.4–7.0,已停止维护)
- ThinkPHP 5.1(支持 PHP 7.0–7.4,仍被大量老项目使用)
- ThinkPHP 6.x(要求 PHP >=7.1,原生支持队列驱动)
运行 php think version 或查看 thinkphp/library/think/App.php 顶部注释,确认真实版本。若显示 v5.1.41 却误以为是“TP7”,后续所有队列配置都会错配环境。
TP5.1 下用 command + MySQL 模拟队列的实操要点
TP5.1 原生不带队列服务,需自行封装 CLI 脚本 + 数据库轮询。这是抖音点赞任务系统、邮件通知等场景的实际做法。
- 建一张
task_queue表,字段至少包含id、job(序列化类名+参数)、status(0=待执行, 1=执行中, 2=成功, 3=失败)、created_at - 写一个命令行脚本
application/command/QueueWorker.php,继承think\console\Command,在handle()中查 status=0 的记录,unserialize($record['job'])后执行 - 用
php think queue:work启动时,必须加--delay=2 --memory=128 --tries=3参数,否则进程会卡死或内存溢出 - Linux 下用
nohup php think queue:work > /dev/null 2>&1 &后台运行,但需配合supervisor管理进程存活,不能只靠 nohup
TP5.1 接入 Redis 队列的避坑细节
若想用 Redis 替代 MySQL 轮询,别直接装 predis/predis —— TP5.1 的 think-queue 扩展只兼容 phpredis 扩展(即 extension=redis.so)。
- 确认
php -m | grep redis有输出,且不是 predis;PHP 7.0 下必须用 phpredis 4.x 分支编译安装 - 配置
config/queue.php时,'type' => 'redis',但'host'不能写127.0.0.1:6379,要拆成'host'=>'127.0.0.1', 'port'=>6379 -
redis驱动下,delay参数单位是秒,不是毫秒;设'delay'=>10表示延迟 10 秒投递,别误填成 10000 - 执行
php think queue:listen前,先运行redis-cli ping确认连通性,否则报错Connection refused时不会提示具体 host/port 问题
为什么不用 Swoole 或 Hyperf 改造队列?
因为现有系统基于宝塔 + Nginx + PHP-FPM,而 Swoole 是常驻进程模型,两者冲突。强行在 TP5.1 里集成 Swoole Worker,会导致:
- 数据库连接在长生命周期中复用失效,出现
MySQL server has gone away - Session 和 Cookie 相关逻辑全部失灵,登录态无法透传
- 所有
$_GET/$_POST入口需重写为协程 HTTP Server,改造成本远超收益
真正该做的,是在保持 FPM 架构前提下,把耗时任务剥离为独立 CLI 进程,用 MySQL 或 Redis 做中间状态同步——这才是抖音点赞机器人、大转盘开奖这类业务的真实落地方式。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











