必须指定--enable-openssl和--enable-http2两个开关,否则HTTPS WebSocket、HTTP/2等功能静默失效;且phpize与--with-php-config路径须严格匹配PHP 8.0版本,extension_dir需指向编译生成的swoole.so实际路径。

要在宝塔面板中让 PHP 8.0 正确加载 Swoole 扩展并启用 HTTPS WebSocket、HTTP/2 和 gRPC 等关键能力,源码编译时必须精确指定核心参数,漏掉任一开关都会导致功能静默失效——比如构造 swoole_http_server 报错、WebSocket 握手失败、或连接被重置却无明确日志提示。
configure 必须带的两个开关
进入 Swoole 源码目录后,执行 ./configure 命令时,【--enable-openssl 和 --enable-http2 这两个参数缺一不可】。不加 --enable-openssl,所有基于 TLS 的通信(包括 swoole_websocket_server 启用 wss://、swoole_http_server 启用 https://)会直接失败;不加 --enable-http2,HTTP/2 协议支持将被完全禁用,即使客户端发起 HTTP/2 请求,服务端也只按 HTTP/1.1 处理。
正确写法示例(PHP 8.0 路径):
./configure --with-php-config=/www/server/php/80/bin/php-config --enable-openssl --enable-http2
注意:参数顺序无关,但路径必须完整——不能写成 php-config-8.0 或漏掉 /bin/;--with-php-config 是强制项,指向你实际使用的 PHP 版本配置工具,否则编译会找不到头文件,报错 Cannot find autoconf 或 php.h not found。
phpize 和 php-config 路径必须严格匹配
第一步永远是调用对应 PHP 版本的 phpize 工具,第二步的 --with-php-config 必须指向同一版本的 php-config。两者路径数字不一致(例如 phpize 用 80,php-config 写成 81),会导致扩展编译时链接错误,生成的 swoole.so 文件无法被该 PHP 版本识别。
方法一:查清当前 PHP 版本号
执行 /www/server/php/80/bin/php -v 确认是 PHP 8.0.x,再用这个数字替换所有路径中的 80。
方法二:自动获取路径
Swoole 6.1.1 是一个专为 PHP 设计的高性能事件驱动并发网络引擎。作为稳定版,它修复了编译时对 zlib 依赖的缺失及 curl 模块的内存安全风险。该版本支持协程、多线程与多进程架构,内置 TCP/HTTP/WebSocket 服务器,能够显著提升 PHP 在微服务、实时通信等场景下的执行效率与并发能力。
运行 php --ini | grep "Loaded Configuration File" 查 CLI 加载的 php.ini,其所在目录的上两级就是 PHP 安装根目录,比如输出 /www/server/php/80/bin/php.ini,则 phpize 路径为 /www/server/php/80/bin/phpize,php-config 路径为 /www/server/php/80/bin/php-config。
编译后确认扩展存放路径
执行 make && make install 后,终端会输出类似:
Installing shared extensions: /www/server/php/80/lib/php/extensions/no-debug-non-zts-20200930/
这个路径就是 swoole.so 实际生成位置。必须确保你的 php.ini 中 extension_dir 指向它,否则即使写了 extension=swoole,PHP 也找不到文件。
验证方式:
① 进入该目录:cd /www/server/php/80/lib/php/extensions/no-debug-non-zts-20200930/
② 查看是否存在 swoole.so:ls -l swoole.so
③ 若无此文件,说明编译未成功或路径被覆盖——此时不要继续改配置,先回溯 make 输出日志找报错行。

















