在centos 7上编译安装swoole成功的核心是:php-config路径正确、php-devel已安装、swoole.so路径与php的extension_dir一致;三者任一出错,php -m均无法显示swoole。

直接说结论:在 CentOS 7 上编译安装 Swoole,核心不是“能不能装”,而是“php-config 路径对不对、php-devel 包有没有装、make install 后的 swoole.so 能不能被 PHP 找到”——这三个点错一个,php -m 就看不到 swoole。
确认 PHP 已安装且 phpize 可用
很多失败卡在这一步,不是 Swoole 的问题,是 PHP 开发环境没配齐。
-
php -v必须输出 7.2+ 版本(Swoole 4.8+ 要求 PHP ≥ 7.4) -
which phpize必须有返回;没有?说明php-devel没装:yum install php-devel(注意:包名随 PHP 版本变,如 PHP 7.4 用php74w-devel) - 如果系统装了多个 PHP(比如通过 Webtatic 或 IUS),
phpize可能指向旧版本,务必用find / -name phpize 2>/dev/null确认路径
./configure 必须指定 --with-php-config
不加这个参数,make 很可能报一堆找不到 php.h、zend_API.h 的错误,因为编译器根本不知道你用的是哪个 PHP。
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离线兼容性测试。
- 先查准路径:
php-config --version和which php-config要匹配;常见路径有:/usr/bin/php-config、/usr/local/php/bin/php-config、/www/server/php/74/bin/php-config(宝塔用户) - 执行:
./configure --with-php-config=/path/to/php-config --enable-openssl --enable-http2(--enable-*按需加,但不要盲目全开,比如没装libcurl-devel就开--enable-swoole-curl会 configure 失败) - 如果提示
libnghttp2 not found,补:yum install libnghttp2-devel;提示openssl/ssl.h not found,补:yum install openssl-devel
make install 后的 swoole.so 路径要和 extension_dir 一致
很多人 make install 成功了,但 php -m 还是没 swoole,问题常出在这里。
-
make install输出最后一行类似:Installing shared extensions: /usr/lib64/php/modules/—— 这就是swoole.so实际放的位置 - 运行
php -i | grep extension_dir,看 PHP 当前加载扩展的目录是不是同一个;不一致?要么改php.ini里的extension_dir,要么用绝对路径加载:extension=/usr/lib64/php/modules/swoole.so - 别漏掉权限:确保
swoole.so对 web server 用户(如nginx或apache)可读:chmod 755 /usr/lib64/php/modules/swoole.so
验证失败时优先检查 php.ini 加载顺序和模块冲突
php -m 看不到 swoole,不等于没装上,很可能是 ini 文件没生效或被覆盖。
- 用
php --ini查真实加载的配置文件路径,重点看Loaded Configuration File是否非none - 有些环境(如宝塔、AMH)会把扩展单独放在
/www/server/php/74/etc/php.d/下,这时不要改主php.ini,新建sw.ini放进去:extension=swoole.so - 如果已存在
extension=swoole但被注释了(;extension=swoole.so),去掉分号;如果写了extension=swoole(缺.so),PHP 7.4+ 会静默忽略 - 重启服务必须对应:PHP-FPM 用
systemctl restart php-fpm,Apache 用systemctl restart httpd,别只 reload nginx
最易被忽略的点:CentOS 7 默认 SELinux 是启用的,如果 php-fpm 报 Permission denied 加载 swoole.so,不是权限数字问题,是 SELinux 上下文限制——临时关掉测试:setenforce 0;长期方案是用 chcon -t lib_t /usr/lib64/php/modules/swoole.so。










