phpenv 不管理扩展,swoole 需为每个 php 版本单独编译安装并配置对应 php.ini;必须使用该版本的 phpize 和 php-config,指定绝对路径加载 swoole.so,切换版本后需重复操作。

phpenv 本身不提供扩展管理能力,它只负责切换 PHP 版本和编译安装 PHP 解释器。Swoole 扩展必须在每个 phpenv 管理的 PHP 版本下单独编译安装,否则即使版本切换成功,php -m 也看不到 swoole。
确认当前 phpenv 管理的 PHP 版本路径与工具链
phpenv 安装的 PHP 默认放在 ~/.phpenv/versions/ 下,但不同版本的 phpize 和 php-config 路径容易混淆,尤其当你用 phpenv install 编译过多个版本时:
检查当前激活版本:
phpenv version(如输出8.1.20)获取该版本完整路径:
phpenv which php→ 得到类似~/.phpenv/versions/8.1.20/bin/php对应的
phpize和php-config一定在同级bin/目录下:~/.phpenv/versions/8.1.20/bin/phpize~/.phpenv/versions/8.1.20/bin/php-config
常见错误:直接运行系统全局的 phpize(来自系统 PHP 或其他版本),导致编译出的 swoole.so 无法被当前 phpenv 版本加载。
用 phpenv 版本对应的 phpize 编译 Swoole
必须严格使用目标 PHP 版本自带的构建工具,不能混用:
下载 Swoole 源码(以 v5.1.3 为例):
wget @#@#@#@#@#@#@#@#@#@0tar -zxvf v5.1.3.tar.gz && cd swoole-src-5.1.3运行对应版本的
phpize(关键!):~/.phpenv/versions/8.1.20/bin/phpize配置时指定准确的
php-config:./configure --with-php-config=~/.phpenv/versions/8.1.20/bin/php-config --enable-openssl编译安装:
make && make install
成功后会输出类似:Installing shared extensions: /home/user/.phpenv/versions/8.1.20/lib/php/extensions/no-debug-non-zts-20210902/
记下这个路径 —— 后续要写进该 PHP 版本的 php.ini。
为 phpenv 版本单独配置 php.ini 并启用 swoole.so
phpenv 不自动创建或管理 php.ini,你得手动处理:
查找当前 PHP 使用的
php.ini路径:php --ini→ 输出类似:Loaded Configuration File: /home/user/.phpenv/versions/8.1.20/etc/php.ini如果该文件不存在,复制默认模板:
cp ~/.phpenv/versions/8.1.20/etc/php.ini.default ~/.phpenv/versions/8.1.20/etc/php.ini编辑该
php.ini,在末尾添加:extension=/home/user/.phpenv/versions/8.1.20/lib/php/extensions/no-debug-non-zts-20210902/swoole.so
注意:必须用绝对路径,不能写 extension=swoole.so —— 因为 phpenv 版本没有标准扩展目录扫描逻辑,且 extension_dir 可能未设或指向错误位置。
验证是否生效:
php -m | grep swoolephp --ri swoole
切换 PHP 版本后 Swoole 不见了?这是正常现象
phpenv 切换版本 = 切换整个 PHP 运行时环境,包括所有已编译的扩展。每个版本的 swoole.so 是独立编译、独立配置的。
- 你为
8.1.20装好了,切到8.2.8后,php -m里必然没有swoole - 必须对
8.2.8重复上述三步:用它的phpize编译、配它的php.ini、指它的swoole.so绝对路径
最容易被忽略的是:忘记检查 php --ini 输出的实际配置文件路径 —— 有些 phpenv 安装方式会把 php.ini 放在 etc/,有些放在 lib/ 下,路径不一致就会白配。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











