必须同时在CLI和FPM的php.ini中添加extension=swoole(PHP 8.0+不带.so),并分别验证:CLI用php -m | grep swoole,FPM用phpinfo()或php -r "echo extension_loaded('swoole') ? 'yes' : 'no';",且FPM配置修改后须重启服务。

CLI 和 FPM 使用的是两套完全独立的 php.ini 配置文件,不是“同一个文件没改到位”,而是根本就不是同一个文件。Swoole 扩展必须在这两个环境中分别启用,否则必然出现「命令行能跑、网页报 Class not found」或反过来的情况。
确认各自实际加载的 php.ini 路径
不能凭经验或目录猜测,必须实查:
- CLI 环境:运行 php --ini | grep "Loaded Configuration File",输出的就是 CLI 实际读取的 php.ini 路径
- FPM 环境:在 Web 页面中调用 phpinfo(),搜索 “Loaded Configuration File”;或在宝塔中对应 PHP 版本目录下查看 /www/server/php/83/etc/php.ini(数字按你实际版本替换);phpenv 用户则是 ~/.phpenv/versions/8.3.0/etc/php.ini
两个 php.ini 都要加 extension=swoole
注意写法细节:
- PHP 8.0+:统一写 extension=swoole(不带 .so 后缀)
- PHP 7.x:若为源码编译安装,通常需写 extension=swoole.so;PECL 安装则仍为 extension=swoole
- 这一行必须加在 php.ini 文件末尾,且确保没有被注释(前面无分号 ;)
改完配置后必须分别重启对应服务
改了哪个环境的配置,就要重启哪个环境的服务:
立即学习“PHP免费学习笔记(深入)”;
- 改了 CLI 的 php.ini:无需重启,下次执行 php 命令即生效
- 改了 FPM 的 php.ini:必须重启 PHP-FPM,例如 bt restart php83(宝塔)或 systemctl restart php-fpm(通用)
- 如果还用了 Apache,且其 PHP 是模块方式加载,也要同步检查并重启 Apache
验证是否真正生效
不能只看 phpinfo() 或只跑 php -m,要分环境验证:
- CLI 环境验证:php -m | grep swoole,有输出即表示 CLI 加载成功
- FPM 环境验证:访问一个含 phpinfo() 的页面,搜索 “swoole”,或运行 php -r "echo extension_loaded('swoole') ? 'yes' : 'no';"(在 Web 环境中执行该代码片段)
- 两者都显示已加载,才算真正完成适配



















