必须严格按真实路径和双配置逻辑操作:确认php版本为80后,执行/www/server/php/80/bin/phpize与--with-php-config=/www/server/php/80/bin/php-config,启用--enable-openssl、--enable-http2和--enable-coroutine,同步修改/www/server/php/80/etc/php.ini和/bin/php.ini并重启php服务。

在宝塔面板中为PHP 8.0环境手动编译安装Swoole扩展时,常因phpize路径错一位、openssl未启用或只改了FPM配置却漏掉CLI配置,导致WebSocket服务启动失败、swoole_http_server()函数报错、php --ri swoole显示“not found”等隐蔽问题,必须严格按真实路径和双配置逻辑操作才能一次成功。
确认PHP版本与运行环境
登录宝塔面板,在首页右上角查看当前默认PHP版本,若显示为PHP-80,则对应路径为/www/server/php/80/;若显示PHP-81或PHP-82,后续所有路径中的数字必须同步替换,不可沿用80。
打开宝塔终端,执行:/www/server/php/80/bin/php -v,确认输出第一行含PHP 8.0.x且末尾括号内为(NTS)——这是宝塔Nginx+PHP-FPM标准部署的非线程安全模式,【Swoole扩展必须匹配NTS版本,ZTS会导致段错误】。
再执行:which php,若返回/usr/bin/php,说明系统级PHP与宝塔PHP不一致,后续所有操作必须显式调用/www/server/php/80/bin/php,否则验证会误判。
安装编译依赖与工具链
CentOS/RHEL系统执行:yum install -y gcc gcc-c++ make autoconf openssl-devel。
Ubuntu/Debian系统执行:apt-get install -y build-essential autoconf libssl-dev。
【openssl-devel(CentOS)或libssl-dev(Ubuntu)缺一不可,否则configure会静默跳过--enable-openssl,导致WebSocket握手失败】。
下载、解压与进入源码目录
执行:cd /www/server && wget https://pecl.php.net/get/swoole-5.1.6.tgz。
执行:tar zxvf swoole-5.1.6.tgz && cd swoole-5.1.6。
注意:不要用GitHub源码,PECL包已适配PHP 8.0 ABI,GitHub主干可能尚未兼容PHP 8.0.30+的协程API变更。
Swoole 6.1.1 是一个专为 PHP 设计的高性能事件驱动并发网络引擎。作为稳定版,它修复了编译时对 zlib 依赖的缺失及 curl 模块的内存安全风险。该版本支持协程、多线程与多进程架构,内置 TCP/HTTP/WebSocket 服务器,能够显著提升 PHP 在微服务、实时通信等场景下的执行效率与并发能力。
执行phpize与configure
第一步:运行/www/server/php/80/bin/phpize,必须带完整路径,【漏掉/bin/或写成phpize-8.0会导致生成错误的configure脚本】。
第二步:运行以下命令(单行输入,勿换行):./configure --with-php-config=/www/server/php/80/bin/php-config --enable-openssl --enable-http2 --enable-coroutine。
解释:PHP 8.0起Swoole 5.x要求显式启用--enable-coroutine,否则Swoole\Coroutine::sleep()直接报错;--enable-http2是WebSocket over TLS的底层依赖,不加则HTTPS WebSocket连接被拒绝。
编译安装并记录扩展路径
执行:make && make install。
编译成功后,终端最后一行会输出类似:Installing shared extensions: /www/server/php/80/lib/php/extensions/no-debug-non-zts-20200930/。
立即执行:ls -l /www/server/php/80/lib/php/extensions/no-debug-non-zts-20200930/swoole.so,确认文件存在且权限为-rwxr-xr-x。若无此文件,说明configure阶段已失败,需回退检查php-config路径是否拼错。
双php.ini配置与重启验证
方法一:CLI与FPM共用同一行配置
编辑/www/server/php/80/etc/php.ini,在文件末尾添加:extension=swoole.so。
再编辑/www/server/php/80/bin/php.ini,同样在末尾添加该行。
保存后,**必须在宝塔面板点击「PHP 80」→「重启」按钮**,不能点「重载配置」。
方法二:区分加载(推荐用于调试)
FPM端:在/www/server/php/80/etc/php-fpm.d/www.conf中找到php_admin_value[extension]行,在其值中追加swoole.so(逗号分隔)。
CLI端:仅修改/www/server/php/80/bin/php.ini,添加extension=swoole.so。
此方式可单独验证CLI是否生效,避免FPM配置污染干扰判断。
验证命令(两个都必须执行):/www/server/php/80/bin/php --ri swoole → 应输出详细信息,含enabled和版本号;/www/server/php/80/bin/php -m | grep swoole → 应返回swoole一行。










