宝塔面板安装Swoole扩展报错需分三步排查:先确认PHP(NTS/ZTS)类型与扩展匹配;再核对CLI和FPM的php.ini路径是否一致并分别配置;最后解决重复加载、版本不兼容及服务未重启问题。

宝塔面板安装Swoole扩展时提示报错,常见于PHP 8.0+环境,错误类型包括“Module 'swoole' already loaded”、php --ri swoole显示not found、CLI能加载但Web页面不生效等,这些不是单纯重装就能解决的配置链断裂问题。
确认PHP版本与扩展路径是否匹配
第一步:在终端执行 /www/server/php/80/bin/php -v(把80换成你实际使用的PHP子目录名),查看输出末尾括号内是(NTS)还是(ZTS)——Swoole Loader必须严格匹配这个类型,错一个就无法加载。
第二步:运行 /www/server/php/80/bin/php --ini,记下Loaded Configuration File路径;再查FPM用的配置:cat /www/server/php/80/etc/php-fpm.d/www.conf | grep php_admin_value,确认它指向的php.ini是否和CLI一致。
第三步:如果两个php.ini路径不同,【必须分别编辑两个文件】,不能只改其中一个。FPM的php.ini通常在/www/server/php/80/etc/php.ini,CLI的是/www/server/php/80/bin/php.ini。
解决“Module 'swoole' already loaded”错误
这个报错说明同一个so文件被重复加载了两次,90%是因为宝塔软件商店安装后又手动加了extension=swoole.so,或者同时启用了swoole和swoole_loader。
方法一:打开FPM用的php.ini(通常是/www/server/php/80/etc/php.ini),搜索swoole,删掉所有重复的extension=行,只保留一条。
Swoole 6.1.1 是一个专为 PHP 设计的高性能事件驱动并发网络引擎。作为稳定版,它修复了编译时对 zlib 依赖的缺失及 curl 模块的内存安全风险。该版本支持协程、多线程与多进程架构,内置 TCP/HTTP/WebSocket 服务器,能够显著提升 PHP 在微服务、实时通信等场景下的执行效率与并发能力。
方法二:检查宝塔PHP设置界面里是否勾选了“Swoole”扩展开关——如果已勾选,就不要再手动写extension=swoole.so,否则必然冲突。
方法三:如果你在用禾匠系项目(如榜店商城v4),【必须卸载原生swoole.so,只保留swoole_loader_20_php72.so】,两者不可共存,强行并存会导致PHP启动失败。
验证CLI与Web环境是否都生效
先验证CLI环境:/www/server/php/80/bin/php --ri swoole,有输出且显示enabled才算成功。
再验证Web环境:新建一个phpinfo.php文件,内容为<?php phpinfo(); ?>,访问该页面后搜索“swoole”,确认模块存在且版本正确。
如果CLI有、Web没有,大概率是FPM没读到正确的php.ini,或php-fpm服务没重启——执行bt 16(重载)无效,必须点宝塔面板里的“重启PHP”按钮,或运行systemctl restart php-fpm-80。
如果两个环境都有,但项目仍报Class 'swoole_websocket_server' not found,说明项目代码调用的是Swoole4+的类名,而你装的是Swoole2.x,版本不兼容。此时要卸载旧版,重新安装Swoole4或5,并确保编译时加了--enable-openssl参数。

















