升级swoole 4.x无需卸载旧版,但多版本残留、多环境或混合安装需清理旧扩展文件和配置;先确认安装方式(源码/pecl/composer/面板),再停用旧配置、删除旧.so、执行pecl uninstall或清理vendor,最后编译安装目标版本并验证。

升级 Swoole 4.x 版本无需先卸载旧版,源码编译安装会自动覆盖;但若存在多版本残留、PHP 多环境(CLI/FPM 分离)、或从 PECL/Composer 混合安装过,就需主动清理旧扩展文件和配置项,否则易引发 Class not found、extension load failed 或协程功能异常。
确认当前安装方式与路径
先判断你用的是哪种安装方式,再针对性清理:
- 源码编译安装:执行
php --ri swoole查看“Extension Path”,记下 .so 文件实际位置(如/usr/lib/php/20220829/swoole.so) - PECL 安装:运行
pecl list | grep swoole,若显示已安装,说明是 PECL 管理的扩展 - Composer 本地加载:检查项目中是否存在
vendor/swoole/swoole目录,且 php.ini 中是否启用了extension=vendor/swoole/...这类非系统路径 - 宝塔/AMH 等面板安装:通常在
/www/server/php/{版本}/lib/php/extensions/...下,且 php.ini 在/www/server/php/{版本}/etc/php.ini
安全清理旧版本(推荐顺序操作)
清理不是删除整个扩展目录,而是精准移除旧文件+禁用旧配置:
Swoole 6.1.1 是一个专为 PHP 设计的高性能事件驱动并发网络引擎。作为稳定版,它修复了编译时对 zlib 依赖的缺失及 curl 模块的内存安全风险。该版本支持协程、多线程与多进程架构,内置 TCP/HTTP/WebSocket 服务器,能够显著提升 PHP 在微服务、实时通信等场景下的执行效率与并发能力。
- 停用旧配置:打开 CLI 和 FPM 各自的 php.ini(用
php --ini和php-fpm -i | grep "Loaded Configuration File"分别确认),注释或删除已有extension=swoole.so或extension="swoole"行 - 删除旧 .so 文件:根据上一步查到的 Extension Path,执行
sudo rm -f /path/to/old/swoole.so(注意别删错目录) - PECL 用户额外执行:
sudo pecl uninstall swoole(仅当pecl list显示已安装时) - Composer 项目用户:删掉
vendor/swoole目录,并移除 composer.json 中相关依赖,再composer update
升级到目标 Swoole 4.x 版本
Swoole 4.8.13 是最后一个支持 PHP 7.4 的稳定版;若你用 PHP 8.0+,请跳过 4.x,直接升 5.1.x。仍需坚持 4.x 的,请按以下流程:
- 下载对应版本源码(如 4.8.13):
wget https://github.com/swoole/swoole-src/archive/v4.8.13.tar.gz - 解压并进入目录:
tar -zxf v4.8.13.tar.gz && cd swoole-src-4.8.13 - 使用对应 PHP 版本的工具链:
/usr/bin/phpize(或宝塔路径如/www/server/php/80/bin/phpize) - configure 必带关键参数:
./configure --with-php-config=/path/to/php-config --enable-openssl --enable-http2 - 编译安装:
make -j$(nproc) && sudo make install - 启用新扩展:在 CLI 和 FPM 的 php.ini 末尾统一添加
extension=swoole(PHP 8.0+ 不写 .so 后缀) - 验证:
php --ri swoole | grep -E "(version|support)",确认 version 显示 4.8.13 且 coroutine => enabled
常见问题避坑提示
升级后报错,大概率不是版本问题,而是环境细节被忽略:
- “Class not found”:90% 是 CLI 和 FPM 的 php.ini 没同步修改,务必两边都加 extension 并重启 php-fpm
-
“Segmentation fault” 或启动失败:检查是否漏了
--enable-openssl,尤其在启用 HTTPS/WebSocket 时 -
协程不生效:确认 php.ini 中未设置
swoole.use_shortname = Off(Swoole 4.4+ 默认关闭短名,需显式开启才支持Swoole\Server等简写) -
旧版本残留干扰:执行
find /usr -name "*swoole*.so" 2>/dev/null全局搜索,删掉非当前使用的 .so 文件










