swoole4编译安装后扩展未加载,主因是php.ini未添加extension=swoole.so、cli与fpm配置不一致或swoole.so路径错误;需确认so文件存在、双环境php.ini均修改、避开swoole_loader冲突及disable_functions拦截。

Swoole4 编译安装后扩展没加载,不是“装失败”,而是加载路径、配置位置或运行环境没对齐。核心问题通常出在三处:php.ini 没加 extension、CLI 和 FPM 配置不一致、或者扩展文件根本没放对地方。
确认 Swoole.so 文件是否真实生成
make install 后会输出类似这样的路径:Installing shared extensions: /www/server/php/74/lib/php/extensions/no-debug-non-zts-20190902/
立刻检查该目录下是否存在 swoole.so:
ls -l /www/server/php/74/lib/php/extensions/no-debug-non-zts-20190902/swoole.so
如果文件不存在,说明编译或安装中途出错,需重跑 make && make install,并留意报错信息(常见缺 openssl-devel、autoconf 等依赖)。
确保 CLI 和 FPM 都启用了扩展
宝塔或自建环境里,PHP CLI(命令行)和 PHP-FPM(Web 服务)往往用不同的 php.ini:
- CLI 的配置路径通常为
/www/server/php/74/etc/php.ini - FPM 的配置可能在
/www/server/php/74/etc/php-fpm.d/www.conf中通过php_admin_value[extension]设置,也可能共用主 php.ini
必须在两个地方都加上:
extension=swoole.so
不要写成 extension="swoole.so" 或 extension=php_swoole.dll(Linux 下是 .so,Windows 才是 .dll)。
Swoole 6.1.1 是一个专为 PHP 设计的高性能事件驱动并发网络引擎。作为稳定版,它修复了编译时对 zlib 依赖的缺失及 curl 模块的内存安全风险。该版本支持协程、多线程与多进程架构,内置 TCP/HTTP/WebSocket 服务器,能够显著提升 PHP 在微服务、实时通信等场景下的执行效率与并发能力。
验证时用对 PHP 执行入口
- 查 CLI 是否生效:
/www/server/php/74/bin/php -m | grep swoole - 查 FPM 是否生效:重启后访问
phpinfo()页面,搜索 “swoole”;或执行/www/server/php/74/bin/php --ri swoole(该命令走 CLI,不代表 Web 环境)
若 CLI 可见而网页不可见,大概率是 FPM 的 php.ini 没改,或 www.conf 里禁用了 extension。
避开 swoole_loader 冲突
禾匠系项目(如榜店商城 v4)自带 swoole_loader_20_php72.so,它和原生 swoole.so 互斥。若已加载 loader,再加 swoole.so 会导致:
-
PHP Warning: Module 'swoole' already loaded -
Class 'Swoole\Http\Server' not found
解决办法:彻底删除或注释掉 loader 相关行(如 extension=swoole_loader_20_php72.so),只保留 extension=swoole.so。
检查 disable_functions 是否拦了关键函数
Swoole 运行依赖 pcntl_fork、posix_kill、shell_exec 等。若 php.ini 中 disable_functions 列表里包含这些,协程或服务器启动会静默失败。临时放开测试:
disable_functions =
确认功能正常后再按需保留必要限制。










