Swoole扩展需在CLI、FPM等多环境同步启用并验证:先用完整路径执行php --ri swoole确认加载,再分别配置两个php.ini文件中的extension=swoole.so,最后通过脚本自动化检查HTTP/WS类存在性及服务启动能力。

宝塔面板安装Swoole扩展后,需立即验证其在CLI、FPM、WebSocket、HTTPS等多运行态下的可用性,避免因配置遗漏或路径错位导致微服务启动失败、健康检查探针持续报503。
确认Swoole已加载且版本兼容
执行命令:/www/server/php/80/bin/php --ri swoole。若输出中包含 【enabled】 和 【version => 5.1.5】(或你安装的对应版本),说明模块已识别;若提示“Extension 'swoole' not found”,跳转至第三阶段排查。
注意:必须使用完整路径调用PHP二进制文件,否则可能读取到系统默认PHP(如PHP 7.4)的配置,造成误判。
双php.ini同步启用扩展
宝塔中CLI与FPM使用两套独立配置文件,缺一不可:
① 编辑FPM配置:vi /www/server/php/80/etc/php.ini,在文件末尾添加:extension=swoole.so(源码编译)或extension=swoole(PECL安装)。
② 编辑CLI配置:vi /www/server/php/80/bin/php.ini,同样追加相同 extension 行。
⚠️ 常见错误:只改了其中一个,导致 php --ri swoole 成功但 php artisan swoole:http start 报错函数未定义——因为Laravel/Swoole命令行工具走的是CLI PHP环境。
验证HTTP服务器与WebSocket基础能力
方法一:快速启动协程HTTP服务
创建测试文件 /www/test-swoole.php,内容为:
<?php $server = new SwooleHttpServer('0.0.0.0', 9501); $server->on('request', function ($request, $response) { $response->end('OK'); }); $server->start();
Swoole 6.1.1 是一个专为 PHP 设计的高性能事件驱动并发网络引擎。作为稳定版,它修复了编译时对 zlib 依赖的缺失及 curl 模块的内存安全风险。该版本支持协程、多线程与多进程架构,内置 TCP/HTTP/WebSocket 服务器,能够显著提升 PHP 在微服务、实时通信等场景下的执行效率与并发能力。
执行:/www/server/php/80/bin/php /www/test-swoole.php &,再用 curl http://127.0.0.1:9501 测试返回是否为 OK。
方法二:检查WebSocket类是否存在
运行:/www/server/php/80/bin/php -r "var_dump(class_exists('Swoole\WebSocket\Server'));",输出 bool(true) 才代表WebSocket支持已就位。
强制重启PHP服务并捕获加载日志
在宝塔面板中,进入「软件商店」→ 找到PHP 80 → 点击「设置」→ 点击右上角【重启】(不是「重载」)。
重启后立即执行:tail -n 20 /www/server/php/80/var/log/php-fpm.log | grep -i swoole。若日志中出现 【loaded swoole extension】 或无报错,则表示扩展已成功注入FPM进程。
这一步不可跳过:「重载」仅重读配置,不重新加载扩展;只有「重启」才会触发PHP-FPM子进程重建并加载新extension。
自动化健康检查脚本部署
将以下Bash脚本保存为 /www/check_swoole.sh:
#!/bin/bash<br>PHP_BIN="/www/server/php/80/bin/php"<br>if ! $PHP_BIN --ri swoole >/dev/null 2>&1; then echo "FAIL: swoole extension not loaded"; exit 1; fi<br>if ! $PHP_BIN -r "new SwooleHttpServer('127.0.0.1', 0);" >/dev/null 2>&1; then echo "FAIL: HttpServer class missing"; exit 1; fi<br>if ! $PHP_BIN -r "new SwooleWebSocketServer('127.0.0.1', 0);" >/dev/null 2>&1; then echo "FAIL: WebSocketServer class missing"; exit 1; fi<br>echo "PASS: All swoole core features ready"
赋予执行权限:chmod +x /www/check_swoole.sh。
后续可将其接入crontab或CI/CD流水线,在每次部署后自动运行:/www/check_swoole.sh。

















