需手动安装Swoole扩展以支持WebSocket等异步能力:一、宝塔商店一键安装;二、源码编译适配PHP 8.0;三、配置php.ini及php-fpm启用;四、Windows下用预编译DLL;五、多环境验证与故障排查。

如果您在宝塔面板中已部署PHP 8.0环境,但需启用高性能异步网络通信能力,却发现Swoole扩展未预装或版本不匹配,则需手动编译安装以满足WebSocket、协程HTTP服务器等场景需求。以下是针对宝塔面板下安装Swoole扩展的多种可行方法:
一、通过宝塔软件商店一键安装(适用支持版本)
此方法适用于宝塔面板软件商店中已上架对应PHP版本的Swoole扩展(如部分PHP 8.0/8.1环境提供swoole4或swoole5选项),操作最简捷,无需命令行干预。
1、登录宝塔面板,在左侧菜单栏点击「软件商店」。
2、在「已安装」列表中找到您正在使用的PHP版本(例如PHP 80),点击右侧「设置」按钮。
3、切换至「安装扩展」选项卡,在搜索框中输入swoole。
4、若列表中显示可安装项(如“Swoole4”或“Swoole5”),点击其右侧「安装」按钮。
5、等待安装完成,页面提示成功后,点击「重启PHP」服务(非重载)。
6、执行验证命令:/www/server/php/80/bin/php --ri swoole,确认输出含版本号及enabled状态。
二、源码编译安装(推荐用于PHP 8.0及指定Swoole版本)
当软件商店无对应扩展、需安装特定版本(如swoole-5.1.5)、或启用openssl/brotli等特性时,必须采用源码编译方式。该方法路径明确、可控性强,完全适配宝塔标准目录结构。
1、使用SSH连接服务器,进入临时工作目录:cd /www/server。
2、下载Swoole稳定版源码包(以5.1.5为例):wget https://pecl.php.net/get/swoole-5.1.5.tgz。
3、解压并进入源码目录:tar -zxvf swoole-5.1.5.tgz && cd swoole-5.1.5。
4、调用PHP 8.0专属phpize工具:/www/server/php/80/bin/phpize。
5、配置编译参数,指向PHP 8.0配置工具:./configure --with-php-config=/www/server/php/80/bin/php-config --enable-openssl。
6、执行编译与安装:make && make install。
7、记录输出中的扩展存放路径(通常为/www/server/php/80/lib/php/extensions/no-debug-non-zts-20200930/),确认其中生成了swoole.so文件。
三、启用扩展并全局生效
编译安装仅生成.so文件,必须显式加载至PHP运行时环境。因宝塔中CLI与FPM可能使用不同php.ini,需确保两处均启用,避免命令行可用而Web不可用的情况。
1、编辑PHP 8.0主配置文件:vi /www/server/php/80/etc/php.ini。
2、在文件末尾新增一行:extension=swoole.so。
3、检查PHP-FPM是否单独指定扩展:打开/www/server/php/80/etc/php-fpm.d/www.conf,查找php_admin_value[extension],若存在且未包含swoole.so,需补充或修改为:php_admin_value[extension] = swoole.so。
4、保存全部配置文件。
5、在宝塔面板中,进入「软件商店 → PHP 80 → 设置 → 服务」,点击重启PHP(非重载)。
四、Windows环境(小皮/PhpStudy)快速安装
若您使用的是Windows平台下的小皮面板(原PhpStudy),其PHP环境为NTS架构且不支持make编译,必须采用预编译DLL方式加载,路径与Linux完全不同。
1、访问PECL官方镜像或国内可信源,下载与您PHP版本、TS/NTS、位数严格匹配的DLL文件(例如php_swoole-5.1.5-8.0-nts-vs16-x64.dll)。
2、将该DLL文件复制到PHP扩展目录,典型路径为:D:\phpstudy_pro\Extensions\php\php-8.0.30-nts\ext\。
3、编辑对应php.ini文件(位于同一目录下),在末尾添加:extension=php_swoole.dll(注意文件名须与实际一致)。
4、在小皮面板中点击「重启Apache」或「重启Nginx+PHP」。
5、创建test.php,内容为<?php echo SWOOLE_VERSION; ?>,通过浏览器访问验证输出。
五、验证与故障定位
安装完成后必须交叉验证CLI与Web环境,排除因配置遗漏导致的单点失效。常见失败原因集中于路径错配、so文件权限不足、SELinux拦截或loader冲突。
1、在终端执行:/www/server/php/80/bin/php -m | grep swoole,应返回swoole。
2、执行详细信息查询:/www/server/php/80/bin/php --ri swoole,确认Version字段非空且coroutine为enabled。
3、新建info.php,内容为<?php phpinfo(); ?>,上传至网站根目录,浏览器访问后搜索swoole,确认Loaded Configuration File路径与所编辑php.ini一致,且Extension Directive显示enabled。
4、若出现Module 'swoole' already loaded错误,立即检查php.ini中是否重复添加extension指令,或是否存在swoole_loader.so共存情况。
5、若提示undefined symbol: OPENSSL_sk_num,说明缺少openssl-devel依赖,执行:yum install -y openssl-devel(CentOS/RHEL)或apt install -y libssl-dev(Ubuntu/Debian)。











