XAMPP默认不带Swoole扩展,需手动源码编译安装:先确认PHP路径与版本,用XAMPP自带phpize和php-config配置,macOS M1/M2须加arch -x86_64前缀,编译后将swoole.so写入正确extension_dir并在/Applications/XAMPP/etc/php.ini中添加extension=swoole.so,最后分别验证CLI和Web层并重启Apache。

XAMPP 默认不带 Swoole 扩展,必须手动安装才能支持 WebSocket、TCP 服务等异步网络通信能力。直接启用 swoole.so 会失败,因为 XAMPP 的 PHP 编译路径、扩展目录和系统依赖都与标准 Linux 发行版不同,尤其在 macOS(M1/M2)或老旧 macOS 上更容易出错。
确认 XAMPP 中的 PHP 路径和版本
别急着下载源码或运行 phpize,先搞清你实际用的是哪个 PHP —— XAMPP 常存在「CLI 用一个 PHP,Apache 用另一个」的问题。
- 打开终端,执行:
/Applications/XAMPP/bin/php -v和/Applications/XAMPP/xamppfiles/bin/php -v,看输出是否一致 - 检查扩展目录位置:
/Applications/XAMPP/bin/php -i | grep extension_dir,注意它指向的路径(常见如/Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20200930/) - macOS M1/M2 用户必须加
arch -x86_64前缀调用工具,否则编译出的swoole.so无法加载(报错:mach-o, but wrong architecture)
源码编译安装(推荐,兼容性最强)
PECL 在 XAMPP 下基本不可用,pecl install swoole 会找不到 php-config 或写入错误路径。必须用 XAMPP 自带的工具链编译。
Swoole 6.1.1 是一个专为 PHP 设计的高性能事件驱动并发网络引擎。作为稳定版,它修复了编译时对 zlib 依赖的缺失及 curl 模块的内存安全风险。该版本支持协程、多线程与多进程架构,内置 TCP/HTTP/WebSocket 服务器,能够显著提升 PHP 在微服务、实时通信等场景下的执行效率与并发能力。
- 下载对应版本源码(例如
swoole-5.1.5.tgz),解压后进入目录 - 执行:
arch -x86_64 /Applications/XAMPP/bin/phpize(macOS M1/M2)或/Applications/XAMPP/xamppfiles/bin/phpize(Intel/macOS 旧版) - 配置时严格指定 XAMPP 的
php-config:./configure --with-php-config=/Applications/XAMPP/bin/php-config --enable-openssl -
make && sudo make install,成功后会提示swoole.so安装到了哪个目录 —— 必须和上一步extension_dir输出路径一致 - 编辑
/Applications/XAMPP/etc/php.ini(不是xamppfiles/etc/php.ini!XAMPP for Mac 的主配置在此),末尾添加:extension=swoole.so
验证是否真正生效
重启 Apache 不够,XAMPP 的 CLI 和 Web 环境是分离的,得分别验证:
- 命令行验证:
/Applications/XAMPP/bin/php --ri swoole,看到enabled和版本号才算 CLI 层 OK - Web 层验证:建一个
info.php,内容为<?php phpinfo(); ?>,浏览器访问,搜索 “swoole”,确认模块已加载且版本匹配 - 常见失败现象:
php -m | grep swoole有输出但phpinfo()没显示 → 说明 CLI 和 Web 使用了不同php.ini,需检查 Apache 加载的是哪个配置文件(phpinfo()页面顶部明确写出)
最易被忽略的一点:XAMPP 的 Apache 启动时不会自动重载 php.ini 修改,改完必须点面板上的「重启 Apache」按钮(不是「重载配置」),否则 extension=swoole.so 形同虚设。

















