必须使用zts版本,否则扩展加载失败、服务崩溃或页面500;执行php -i | grep "thread safety"和php -r "echo php_zts ? 'zts' : 'nts';"确认为zts后,从github下载含-zts的预编译包或源码编译时加--enable-thread-safe参数,再将swoole.so放入no-debug-zts目录并完整配置路径,最后重启服务验证。

宝塔面板下安装Swoole扩展时,若你的PHP运行在Apache模块(mod_php)模式或IIS环境,必须使用ZTS(线程安全)版本,否则扩展加载失败、服务无法启动、页面直接500错误。
确认当前PHP是否为ZTS线程安全版本
这一步不能跳过,NTS和ZTS版本的.so文件完全不兼容,混用会导致PHP进程崩溃。打开宝塔终端,执行:
php -i | grep "Thread Safety"
如果输出是 【Thread Safety => enabled】,说明是ZTS版本;若显示disabled,则是NTS,本教程不再适用,请停止操作。
再执行一次验证命令:
php -r "echo PHP_ZTS ? 'ZTS' : 'NTS';"
终端返回ZTS才算真正确认。注意:宝塔默认安装的PHP-FPM多为NTS,只有你主动切换为Apache模式或手动编译启用了ZTS,才可能进入ZTS环境。
下载并安装ZTS专用Swoole扩展
官方PECL未提供ZTS专用包,必须从Swoole GitHub Release页获取对应构建版本。以PHP 8.0 ZTS为例:
方法一:直接下载预编译ZTS包(推荐)
访问 https://github.com/swoole/swoole-src/releases ,找到最新稳定版(如v5.1.1),下载文件名含 【-zts】 的tar.gz包,例如 swoole-5.1.1.tgz-zts。
方法二:源码编译启用ZTS支持
进入源码目录后,configure命令必须显式开启ZTS:
./configure --with-php-config=/www/server/php/80/bin/php-config --enable-thread-safe
Swoole 6.1.1 是一个专为 PHP 设计的高性能事件驱动并发网络引擎。作为稳定版,它修复了编译时对 zlib 依赖的缺失及 curl 模块的内存安全风险。该版本支持协程、多线程与多进程架构,内置 TCP/HTTP/WebSocket 服务器,能够显著提升 PHP 在微服务、实时通信等场景下的执行效率与并发能力。
这一步漏掉 【--enable-thread-safe】 参数,编译出的so仍是NTS版本,后续所有操作都白费。
编译完成后,检查生成路径是否含 zts 字样:
ls /www/server/php/80/lib/php/extensions/*zts*
正常应看到类似 no-debug-zts-20200930 这样的目录名。若看到的是 no-debug-non-zts-20200930,说明编译失败或参数未生效,立即中止。
配置php.ini并重启服务
第一步:定位ZTS扩展目录
执行 php -i | grep extension_dir,记下路径,然后进入该目录的子目录,找含zts的文件夹,例如:
/www/server/php/80/lib/php/extensions/no-debug-zts-20200930/
第二步:编辑PHP配置文件
宝塔面板 → PHP 8.0 → 配置文件,在末尾新增一行:
extension=/www/server/php/80/lib/php/extensions/no-debug-zts-20200930/swoole.so
注意:路径必须完整、精确,不能省略 /no-debug-zts-20200930/ 这一段,否则PHP会去NTS目录下找文件,报错“找不到指定模块”。
第三步:重启PHP服务
宝塔面板 → PHP 8.0 → 重载配置 → 重启服务
第四步:验证安装结果
执行 php --ri swoole,若输出中包含“Thread Safety => enabled”,且无警告信息,即表示ZTS版本Swoole已成功加载。









