ThinkPHP客服系统需ThinkPHP+Workerman+WebSocket三者协同运行,缺一不可;配置错误、环境缺失、权限问题及Nginx代理设置不当是常见故障根源。

ThinkPHP 客服系统不是装完就能跑的框架项目,它本质是「ThinkPHP + Workerman + WebSocket」三件套组合体,缺一不可。不配好 Workerman 服务,前端聊天窗口永远显示“连接中”;不改对 public/index.php 和 Nginx 配置,后台根本打不开。
为什么 start_for_win.bat 双击没反应或报错?
Windows 下双击启动失败,90% 是因为 PHP 命令没进系统 PATH,或者当前目录不对。
- 别双击,用 CMD 进入
websocket/目录后手动执行:php start.php start -d - 确认 PHP 版本 ≥ 7.2(
php -v查),且未禁用pcntl_fork、pcntl_signal等函数(宝塔面板里要手动删掉这些禁用项) - 如果提示
Class 'Workerman\Worker' not found,说明vendor/缺失 —— 源码包里没带 Composer 依赖,必须进项目根目录执行composer install补全 - 端口被占常见于 456、9090、2080 —— 用
netstat -ano | findstr :456查 PID,再用任务管理器杀掉
config/database.php 改了但连不上数据库?
ThinkPHP 5 的数据库配置默认走 env 文件优先级更高,光改 database.php 不生效。
- 先检查项目根目录是否存在
.env文件,如果有,优先修改它里面的DB_HOST、DB_NAME等字段 - MySQL 字符集必须是
utf8mb4,建库时加DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci,否则中文存进去变问号或报错 - 账号密码含特殊字符(如
@、/)必须 URL 编码,例如密码pa@ss/word要写成pa%40ss%2Fword - 宝塔用户注意:MySQL 默认只允许本地连接,远程访问需在 phpMyAdmin 里给用户授权
host = %
Nginx 代理 WebSocket 失败,消息发不出去?
WebSocket 不是 HTTP,Nginx 必须显式开启 Upgrade 协议支持,否则握手直接 400。
- location 块里必须同时存在这三行(顺序不能错):
proxy_http_version 1.1、proxy_set_header Upgrade $http_upgrade、proxy_set_header Connection "Upgrade" - 别把
proxy_pass http://127.0.0.1:456写在location /下 —— 应单独配location /app或location /gateway,和前端 JS 里new WebSocket('wss://xxx.com/app')的路径严格一致 - HTTPS 强制要求:
wss://必须配 SSL,且证书不能是自签;Nginx 的ssl_protocols至少包含TLSv1.2 - 浏览器控制台若报
net::ERR_CONNECTION_REFUSED,先 telnet 测试端口:telnet 127.0.0.1 456,不通就说明 Workerman 根本没起来
商户后台登录成功却跳转 404?
ThinkPHP 5 的路由和入口文件耦合极深,public 目录外的请求会被直接拦截。
立即学习“PHP免费学习笔记(深入)”;
- 确保网站根目录指向的是
/public,不是项目根目录 —— 宝塔里叫“网站目录”,必须手动改 - 伪静态规则必须启用且匹配 ThinkPHP:Nginx 配置里要有
if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=$1 last; } - 前端 JS 请求地址写死成
/admin/login,但实际接口可能是/index.php/admin/login—— 打开浏览器 Network 面板看真实请求路径,再反推路由是否开启 - session 保存路径权限问题常被忽略:
runtime/session目录需 755,且属主是 web 服务器运行用户(如 www)
OK,或者 Nginx error.log 频繁刷 upstream prematurely closed connection —— 这类问题从来不在代码里,而在 PHP 进程模型、端口权限、SSL 握手链路这三个交界处。盯住日志,别猜。



















