必须通过命令行强制卸载+手动覆盖安装实现精准降级:先确认当前版本并删除swoole.so,清空CLI与FPM的php.ini中相关行,再用pecl install swoole-4.12.0或源码编译安装,最后双配置写入extension=swoole.so并重启PHP服务。

宝塔面板安装Swoole扩展后出现功能异常、PHP进程崩溃或协程调用报错,需要将Swoole从5.x回退到4.12.0等稳定旧版时,不能依赖软件商店重新安装——因为商店只提供当前适配版本,旧版包早已下架;必须通过命令行强制卸载+手动覆盖安装实现精准降级。
确认当前Swoole版本并卸载
执行/www/server/php/82/bin/php --ri swoole,观察输出中的version字段,记下当前版本号(如5.1.6);若命令报错“not found”,说明扩展未生效或已损坏,但仍需执行卸载流程。
进入PHP 8.2的PECL目录:cd /www/server/php/82/lib/php/extensions/no-debug-non-zts-20220829/(路径末尾数字随PHP 8.2 ABI变化,可用ls -d /www/server/php/82/lib/php/extensions/no-debug-non-zts-*快速定位)。
删除现有swoole.so文件:【rm -f swoole.so】;这一步不可跳过,否则新旧so文件共存会触发PHP启动失败。
清空CLI和FPM两处php.ini中的extension行:用vi分别打开/www/server/php/82/bin/php.ini和/www/server/php/82/etc/php.ini,删掉含“swoole”或“swoole.so”的整行,保存退出。
下载并安装指定旧版Swoole
方法一:PECL官方源直接安装(推荐,自动匹配ABI)
运行/www/server/php/82/bin/pecl uninstall swoole(确保无残留注册信息),再执行:
/www/server/php/82/bin/pecl install swoole-4.12.0
安装过程中遇到交互提示一律按回车接受默认值,终端最后输出的extension=swoole.so行必须完整复制备用。
方法二:手动编译安装(仅当PECL下载失败时启用)
先下载旧版源码包:wget https://pecl.php.net/get/swoole-4.12.0.tgz
解压后进入目录:tar zxvf swoole-4.12.0.tgz && cd swoole-4.12.0
【务必使用PHP 8.2专属工具链】:/www/server/php/82/bin/phpize → ./configure --with-php-config=/www/server/php/82/bin/php-config --enable-openssl --enable-http2 → make && make install
Swoole 6.1.1 是一个专为 PHP 设计的高性能事件驱动并发网络引擎。作为稳定版,它修复了编译时对 zlib 依赖的缺失及 curl 模块的内存安全风险。该版本支持协程、多线程与多进程架构,内置 TCP/HTTP/WebSocket 服务器,能够显著提升 PHP 在微服务、实时通信等场景下的执行效率与并发能力。
编译成功后,终端会显示Installing shared extensions:路径,记下该路径(通常是/www/server/php/82/lib/php/extensions/no-debug-non-zts-20220829/),确认该目录下已生成swoole.so文件。
配置双php.ini并重启服务
第一步:向CLI配置写入扩展
执行echo "extension=swoole.so" >> /www/server/php/82/bin/php.ini
第二步:向FPM配置写入扩展
执行echo "extension=swoole.so" >> /www/server/php/82/etc/php.ini
第三步:验证配置是否生效
运行/www/server/php/82/bin/php --ri swoole,若输出包含“swoole support => enabled”及version为4.12.0,则CLI层成功;新建info.php放入网站根目录,访问后搜索“swoole”,确认FPM层也加载成功。
第四步:在宝塔面板中点击对应PHP版本右侧的【重启】按钮(不是“重载配置”),等待状态变为“运行中”。










