根本原因是构建链中zlib支持不完整:需系统zlib开发包就位、PHP编译时启用--with-zlib、Swoole4自身压缩选项联动,任一缺失均导致configure报错或运行时zlib函数不可用。

编译 Swoole4 失败并提示 zlib 相关错误,根本原因不是 Swoole 本身有问题,而是构建链中 zlib 支持不完整——它既要求系统级 zlib 开发文件就位,又要求 PHP 编译时已启用 zlib,还可能涉及 Swoole 自身的压缩选项联动。漏掉任一环,configure 就会卡在 “zlib library not found” 或运行时报 zlib_decode() 不存在、gzip 模块不可用。
确认 zlib 开发包是否装对版本
zlib 运行库(如 zlib1g 或 zlib)不能代替开发包。必须安装含 zlib.h 和静态/动态链接支持的包:
- Ubuntu/Debian:
sudo apt update && sudo apt install zlib1g-dev - CentOS/RHEL 7–8:
sudo yum install zlib-devel - Rocky/AlmaLinux/CentOS 9+ 或 Fedora:
sudo dnf install zlib-devel - 银河麒麟 V10(离线):需提前下载
zlib-devel-*.rpm及其依赖(如glibc-devel),按依赖顺序rpm -ivh *.rpm
装完验证:ls /usr/include/zlib.h 应有输出;pkg-config --exists zlib && echo OK 应返回 OK。
检查 PHP 是否自带 zlib 支持
Swoole4 编译依赖 PHP 的 zlib 功能可用。若你用的是源码编译的 PHP,必须在 configure 阶段显式加上 --with-zlib(路径默认为 /usr,macOS Homebrew 下可能是 --with-zlib=/opt/homebrew/opt/zlib)。
Swoole 6.1.1 是一个专为 PHP 设计的高性能事件驱动并发网络引擎。作为稳定版,它修复了编译时对 zlib 依赖的缺失及 curl 模块的内存安全风险。该版本支持协程、多线程与多进程架构,内置 TCP/HTTP/WebSocket 服务器,能够显著提升 PHP 在微服务、实时通信等场景下的执行效率与并发能力。
- 运行
php -m | grep zlib,有输出才表示已启用 - 运行
php -r "echo function_exists('gzopen') ? 'OK' : 'MISSING';",返回 OK 才说明函数可用 - 若无输出或返回 MISSING,PHP 需重新编译,不能仅靠
extension=zip补救
处理 Swoole4 的额外压缩依赖
Swoole4 默认启用 gzip,但若你在 configure 时加了 --enable-brotli=yes,就会额外需要 libbrotlienc:
- Debian/Ubuntu:
sudo apt install libbrotli-dev - CentOS/RHEL/Rocky:
sudo dnf install brotli-devel(EPEL 源需启用) - 不启用 Brotli?那就删掉
--enable-brotli参数,避免无谓报错
注意:gzip 和 deflate 仍依赖 zlib,所以即使禁用 Brotli,前两步也必须完成。
宝塔或 phpenv 环境下的路径匹配要点
很多失败源于 phpize 和 php-config 指向了错误的 PHP 版本:
- 宝塔用户:必须用完整路径,如
/www/server/php/74/bin/phpize和/www/server/php/74/bin/php-config - phpenv 用户:不能只写
phpize,得用~/.phpenv/versions/7.4.33/bin/phpize - 执行
which phpize和phpize --version,确保输出的 API 版本(如 20190902)与当前 PHP 版本一致
另外,Swoole4 要求 PHP ≥ 7.3,且推荐开启 ZTS(线程安全),编译 PHP 时建议加 --enable-maintainer-zts。

















