Swoole4要求PHP≥7.3且严格匹配版本号(如7.4、8.1)与线程安全类型(NTS/ZTS),宝塔默认为NTS,需通过php -v确认并下载对应swoole_loader或编译源码;须手动编译而非依赖宝塔商店,配置CLI与FPM双php.ini并重启服务;Swoole.so与swoole_loader.so互斥,不可共存。

确认Swoole4与PHP版本及线程安全类型匹配
Swoole4要求PHP ≥ 7.3,且严格区分版本号(如7.4、8.1)和线程安全类型(NTS/ZTS)。宝塔默认安装的PHP多为NTS(非线程安全),而Apache模块常用ZTS。装错类型会导致扩展加载失败或符号错误。执行php -v查看输出末尾括号内容:显示(NTS)即非线程安全,(ZTS)为线程安全。务必按此类型下载对应Swoole Loader或编译Swoole4源码——例如PHP 7.4 NTS需用swoole_loader_20_php74.so,而非72或81版本。
绕过宝塔商店,手动编译Swoole4到指定PHP版本
宝塔软件商店不提供Swoole4,点“安装”无效。必须用目标PHP版本的工具链编译:
- 先装依赖:yum install -y gcc gcc-c++ autoconf libtool make openssl-devel(CentOS)或apt install -y build-essential libssl-dev(Ubuntu)
- 下载Swoole4源码:wget https://github.com/swoole/swoole-src/archive/v4.8.0.tar.gz && tar -zxvf v4.8.0.tar.gz
- 进入目录,用指定PHP版本的工具编译:
cd swoole-src-4.8.0
/www/server/php/74/bin/phpize
./configure --with-php-config=/www/server/php/74/bin/php-config --enable-openssl --enable-http2
make && sudo make install - 检查生成路径:ls -l /www/server/php/74/lib/php/extensions/no-debug-non-zts-20190902/swoole.so
CLI与FPM配置必须双写,且各自重启
PHP CLI(命令行)和FPM(Web服务)加载完全独立的php.ini和扩展配置,只改一个等于白改:
- 查CLI实际配置:php --ini | grep "Loaded" → 编辑对应/www/server/php/74/etc/php.ini,末尾加extension=swoole
- 查FPM配置路径(宝塔中通常为/www/server/php/74/etc/php.ini),同样加extension=swoole
- 重启对应服务:bt restart php74 或 systemctl restart php-fpm-74;CLI无需重启,但需确认which php指向正确版本
避开Swoole与Swoole Loader冲突
禾匠系项目(如榜店商城、MNews Pro)依赖加密版swoole_loader_xxx.so,它与原生swoole.so互斥。共存会触发Module 'swoole' already loaded或500错误:
立即学习“PHP免费学习笔记(深入)”;
- 若项目需Loader,就不要装原生Swoole4;反之,若需Swoole4功能(如协程HTTP服务器),则必须卸载或注释掉Loader相关行
- 检查所有php.ini(包括CLI/FPM)、宝塔「PHP设置」→「禁用函数」里是否误禁pcntl_fork, proc_open等Swoole必需函数
- 验证时用干净脚本:,避免框架缓存干扰



















