phpEnv 不集成 PEAR,需为每个 PHP 版本单独安装;PEAR 必须与当前 php 二进制严格匹配,安装后须手动配置 include_path 并验证,且生态已断代,推荐迁移到 Composer。

phpEnv 本身不提供或集成 PEAR —— 它只是一个 PHP 版本管理工具,和 PEAR 没有绑定关系。你得手动在每个激活的 PHP 版本里单独安装 PEAR。
为什么 phpEnv 下运行 pear 命令会报“command not found”
因为 phpEnv 只负责切换 php 可执行文件,不会自动部署 PEAR 或修改 include_path、PATH。即使你用系统包管理器装过全局 PEAR,它也大概率不匹配当前 phpEnv 激活的 PHP 版本(尤其是 ABI 不兼容时)。
- PEAR 必须和当前使用的
php二进制严格对应:同一编译版本、同一扩展加载状态(比如 ZTS 开关) - phpEnv 切换版本后,
which php指向的是它自己维护的路径(如~/.phpenv/versions/8.2.12/bin/php),而系统 PEAR 通常装在/usr/share/php或/usr/local/bin/pear,两者隔离 - PEAR 的
php_dir路径需指向该 PHP 版本能加载的目录,硬链接或软链接过去容易出require_once(): Failed opening required 'PEAR.php'
在 phpEnv 激活的 PHP 版本中安装 PEAR 的正确步骤
必须对每个要使用的 PHP 版本单独运行安装流程,不能复用。推荐使用官方 go-pear.phar 方式,兼容性最稳。
- 先确认当前 PHP 版本:
phpenv versions→phpenv shell 8.2.12→php -v - 下载安装器:
curl -O https://pear.php.net/go-pear.phar - 用当前 PHP 执行:
php go-pear.phar - 安装类型选
local(不要选 system,避免权限冲突) - 关键一步:当提示 “Modify php.ini?” 时,务必选
yes;它会输出类似这样的配置行:include_path = ".:/home/you/.phpenv/versions/8.2.12/lib/php"
你需要手动把这行加到该 PHP 版本专属的php.ini中(路径通常是~/.phpenv/versions/8.2.12/etc/php.ini) - 安装完执行
pear version验证,再运行pear upgrade-all更新自身
pear install 失败常见原因和绕过方法
PEAR 官方通道(pear.phpunit.de 等)已多年未维护,很多包 404 或依赖链断裂。PHP 7.4+ 下尤其明显。
- 执行
pear channel-discover pear.phpunit.de报channel-add: Cannot open "https://pear.phpunit.de/channel.xml"→ 这是正常现象,该域名已停用,不用强求 -
pear install phpunit/PHPUnit在 PHP 8.x 上基本失败:PHPUnit 已全面转向 Composer,PEAR 版本最高只支持到 PHP 7.3 - 替代方案:改用
composer global require phpunit/phpunit,并确保~/.composer/vendor/bin在 PATH 中 - 如果非要用旧版 PEAR 包(如
Mail、Net_SMTP),优先查pear list-all | grep -i mail,再试pear install pear/Mail—— 注意包名前缀是pear/,不是Mail
PEAR 的核心问题不在安装流程,而在于生态断代:它和现代 PHP 的 autoloader、命名空间、扩展 ABI 都存在隐性冲突。哪怕 pear install 显示成功,require_once 'XXX.php' 仍可能因路径或类加载失败。真要长期用,建议把 PEAR 包转成 Composer 包封装,或直接迁移到对应 Composer 替代品(如 phpmailer/phpmailer 替代 Mail)。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











