必须完成扩展安装、PHP配置启用、协程参数调优三步闭环操作;漏掉任一环节都会导致Swoole\Coroutine类不可用或协程函数(如go()、co::sleep())报错。

要在宝塔面板中安装Swoole并开启协程能力,必须完成扩展安装、PHP配置启用、协程参数调优三步闭环操作;漏掉任一环节都会导致Swoole\Coroutine类不可用或协程函数(如go()、co::sleep())报错。
确认PHP版本与编译环境
先用SSH登录服务器,执行/www/server/php/80/bin/php -v确认当前主力PHP版本(如80/81/82),再检查编译工具是否齐全:yum install -y gcc gcc-c++ make autoconf(CentOS)或apt install -y build-essential autoconf(Ubuntu)。若缺失gcc,后续phpize会直接失败,且错误提示模糊,容易误判为路径问题。
进入对应PHP目录:cd /www/server/php/80。这一步不能跳过——宝塔不同PHP版本的phpize和php-config互不兼容,用错版本会导致swoole.so生成但无法加载。
安装Swoole扩展(推荐pecl方式)
方法一:pecl自动适配(首选)
执行/www/server/php/80/bin/pecl install swoole。安装过程中会询问是否启用openssl、http2等特性,直接回车使用默认值即可——协程功能不依赖这些选项,但openssl对后续WSS加密必需。
安装成功后终端会输出类似extension=swoole.so的一行,【必须复制这一整行,后续配置要用】。
方法二:源码编译(仅当pecl失败时启用)
下载官方PECL包:wget https://pecl.php.net/get/swoole-5.1.6.tgz → 解压:tar -zxvf swoole-5.1.6.tgz → 进入目录:cd swoole-5.1.6 → 执行/www/server/php/80/bin/phpize → 配置:./configure --with-php-config=/www/server/php/80/bin/php-config → 编译安装:make && make install。注意看最后一行输出的Installing shared extensions:路径,确保swoole.so确实生成在该目录下。
启用扩展并区分CLI与FPM配置
第一步:修改CLI配置
编辑vi /www/server/php/80/etc/php.ini,翻到文件末尾,粘贴刚才复制的extension=swoole.so(去掉分号)。这一步决定php -m | grep swoole能否看到扩展。
Swoole 6.1.1 是一个专为 PHP 设计的高性能事件驱动并发网络引擎。作为稳定版,它修复了编译时对 zlib 依赖的缺失及 curl 模块的内存安全风险。该版本支持协程、多线程与多进程架构,内置 TCP/HTTP/WebSocket 服务器,能够显著提升 PHP 在微服务、实时通信等场景下的执行效率与并发能力。
第二步:修改FPM配置
宝塔中FPM使用独立配置,需额外处理:打开/www/server/php/80/etc/php-fpm.d/www.conf,找到php_admin_value[extension]这一行,在其值列表末尾追加swoole.so(注意用分号分隔);若该行不存在,则在文件末尾新增php_admin_value[extension] = "swoole.so"。
第三步:重启服务
在宝塔面板PHP设置页点击【重启PHP】按钮——不是“重载配置”。重载不会重新加载扩展,会导致Web端phpinfo()里看不到Swoole,而命令行却显示正常,这种分裂状态是新手最常踩的坑。
验证协程功能是否就绪
① 创建测试文件test_coroutine.php,内容为:<?php go(function () { echo "协程已启动\n"; co::sleep(0.1); echo "协程已结束\n"; }); ?>
② 命令行执行:/www/server/php/80/bin/php test_coroutine.php。若输出两行文字且无Class 'Swoole\Coroutine' not found报错,说明协程基础可用。
③ 检查php --ri swoole输出中是否有Supports coroutines => enabled字段。没有此项表示编译时未启用协程支持(极少见,多因旧版Swoole或手动配置遗漏--enable-coroutine参数)。
④ 在Web环境验证:新建info.php写入<?php phpinfo(); ?>,访问该页面搜索“swoole”,确认“support coroutines”为enabled,且“version”字段显示5.x而非4.x(Swoole 4.x协程需手动开启,5.x默认启用)。

















