phpenv 不自带 yaml 扩展,需手动编译安装:先装 libyaml-dev,再用对应版本 phpize 编译 yaml 源码,make install 后在该版本 php.ini 中添加 extension=yaml.so 才生效。

phpEnv 本身不提供 yaml 扩展,必须手动编译安装;配置文件里写 extension=yaml.so 不起作用,因为 phpEnv 默认没打包这个扩展。
为什么 phpEnv 的 php.ini 加 extension=yaml.so 没反应
phpEnv 是多版本 PHP 环境管理工具,它只负责切换 PHP 二进制和基础配置,所有扩展都得独立编译并放入对应版本的 ext 目录。直接在 php.ini 里加一行 extension=yaml.so,PHP 启动时会报 Unable to load dynamic library 'yaml.so' —— 因为那个文件根本不存在。
- phpEnv 不自动下载、编译或安装任何 PECL 扩展
- 每个 PHP 版本的扩展路径是独立的,比如
~/.phpenv/versions/8.2.10/lib/php/extensions/no-debug-non-zts-20220829/ -
php.ini中的extension=只是“声明要加载”,不是“帮你装好”
在 phpEnv 下编译安装 yaml 扩展的实操步骤
核心是:先装 libyaml(底层依赖),再用对应 PHP 版本的 phpize 编译 yaml 扩展。
- 先确认当前激活的 PHP 版本:
phpenv version,比如输出8.2.10 - 安装系统级依赖:
sudo apt install libyaml-dev(Ubuntu/Debian)或brew install libyaml(macOS) - 下载对应 PHP 版本兼容的 yaml 源码包,例如:
wget https://pecl.php.net/get/yaml-2.2.2.tgz - 解压后进入目录,执行:
~/.phpenv/versions/8.2.10/bin/phpize(路径必须指向你当前用的 PHP 版本) - 然后:
./configure --with-php-config=~/.phpenv/versions/8.2.10/bin/php-config -
make && make install,成功后会输出类似:Installing shared extensions: ~/.phpenv/versions/8.2.10/lib/php/extensions/no-debug-non-zts-20220829/ - 编辑该版本的
php.ini(路径通常为~/.phpenv/versions/8.2.10/etc/php.ini),追加:extension=yaml.so
常见报错和绕不过去的坑
编译阶段最容易卡在三个地方,不是版本不匹配就是路径写错。
-
Cannot find autoconf:缺构建工具,Ubuntu 上装autoconf和automake,macOS 上brew install autoconf automake -
libyaml not found:即使装了libyaml-dev,也可能因 pkg-config 路径不对找不到,可临时加:PKG_CONFIG_PATH=/usr/local/lib/pkgconfig ./configure ... -
phpize fails with 'cannot find config.m4':说明你进错了目录,必须在解压后的yaml-2.2.2/根目录下执行,不能进src/或其他子目录 - 装完后
php -m | grep yaml没输出?检查是否改对了php.ini—— phpEnv 下每个版本有自己独立的配置文件,别去改全局或 Apache 的那个
phpEnv 配置文件中 yaml 相关项怎么写才有效
phpEnv 自身没有 yaml 专用配置项。.phpenv.yml 或 phpenv configure 命令都不管扩展安装。唯一有效的“配置”只有两处:
-
~/.phpenv/versions/{x.y.z}/etc/php.ini里加extension=yaml.so - 如果要用 INI 片段管理(比如开发/测试不同配置),可新建
~/.phpenv/versions/8.2.10/etc/conf.d/20-yaml.ini,内容仍为extension=yaml.so - 注意:不要写成
extension=php_yaml.dll(Windows 才用 .dll),phpEnv 是类 Unix 环境,必须用.so
最常被忽略的一点:phpEnv 切换版本后,php --ini 显示的配置路径会变,但 shell 里 which php 指向的是 shim 脚本,容易误以为在改同一个文件。务必每次用 php --ini 确认当前生效的 php.ini 路径。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











