先查 /www/server/php/80/var/log/php-fpm.log(FPM 运行时错误)、/www/server/panel/logs/panelBoot.pl(宝塔安装输出)和 /root/.pecl/swoole/install.log(pecl 编译日志),路径中的 80 需替换为实际 PHP 版本号。

宝塔面板下 Swoole 安装失败,先看哪个日志?
安装失败时,php --ri swoole 报 not found 或 Call to undefined function,别急着重装——先查日志。宝塔环境下,关键日志分三处,按优先级看:
-
/www/server/php/80/var/log/php-fpm.log(FPM 运行时错误,比如swoole.so: undefined symbol: SSL_CTX_set_alpn_protos,说明 openssl 没启用) -
/www/server/panel/logs/panelBoot.pl(宝塔自身安装扩展时的输出,搜swoole或configure,能看到 configure 参数是否漏了--enable-openssl) -
/root/.pecl/swoole/install.log(如果用了pecl install swoole,这个文件记录编译全过程,常见报错如checking for OpenSSL support... no)
注意:这些路径里的 80 必须和你实际 PHP 子目录一致;查不到日志,说明根本没走到编译或加载阶段,大概率是路径或配置写错了。
configure 日志里看到 “no” 就得停,别继续 make
手动编译时,./configure 输出里一旦出现以下任一关键词,make 肯定失败,必须中断并修正:
-
checking for OpenSSL support... no→ 缺系统库:libssl-dev(Debian/Ubuntu)或openssl-devel(CentOS/RHEL),不是 PHP 扩展没开 -
checking for HTTP2 support... no→ 同样缺nghttp2开发包,CentOS 用yum install nghttp2-devel -
checking for php-config... not found→--with-php-config路径写错了,比如漏了/bin/或数字写成81 -
checking for ZTS... no→ PHP 是 NTS 版本,但你下了 TS 的 Windows DLL(仅限 Windows 场景)
configure 不报错 ≠ 功能完整。它默认跳过未满足的依赖,但后续 swoole_http_server 就会直接不可用。
Swoole 6.1.1 是一个专为 PHP 设计的高性能事件驱动并发网络引擎。作为稳定版,它修复了编译时对 zlib 依赖的缺失及 curl 模块的内存安全风险。该版本支持协程、多线程与多进程架构,内置 TCP/HTTP/WebSocket 服务器,能够显著提升 PHP 在微服务、实时通信等场景下的执行效率与并发能力。
extension=swoole.so 加了却无效?检查两个 php.ini 和加载路径
日志没报错,但 php --ri swoole 仍失败,90% 是配置没生效。重点验证三点:
- 确认 CLI 和 FPM 加载的是不同
php.ini:/www/server/php/80/bin/php -i | grep "Loaded Configuration File"和/www/server/php/80/bin/php-fpm -i | grep "Loaded Configuration File"输出必须不同 - 两个
php.ini都得加extension=swoole.so(注意:PECL 安装新版可能只需extension=swoole,无.so) - 检查
swoole.so实际位置是否匹配extension_dir:/www/server/php/80/bin/php -i | grep extension_dir输出路径,再ls -l看该目录下是否有swoole.so
常见坑:改了 /etc/php.ini 却忘了 CLI 用的是 /bin/php.ini;或者 extension_dir 指向了旧版本目录,而 swoole.so 被 make install 放到了新路径。
Windows 下 “Unable to load dynamic library” 怎么定位?
报这个错,本质是 DLL 加载失败,不是 Swoole 本身问题。按顺序排查:
- 用
php -i确认Thread Safety是enabled(TS)还是disabled(NTS),下载的 DLL 必须严格匹配 - 确认 PHP 架构是
x64还是x86,DLL 也得一致;用php -r "echo PHP_INT_SIZE;"输出8是 x64,4是 x86 - 把下载的
php_swoole.dll放进ext目录后,用depends.exe(Dependency Walker)打开它,看是否提示缺失MSVCP140.dll等 VC 运行库 - 检查
php.ini中extension_dir是否指向真实 ext 目录,且路径用正斜杠/或双反斜杠\,单反斜杠会被 PHP 当转义符处理
最隐蔽的点:某些小皮/PhpStudy 环境默认禁用 allow_url_include 或 disable_functions 里误删了 dl,会导致 DLL 加载被拦截,但日志里不提示。

















