软件搬运工
发布于 2026-06-08 / 14 阅读
0
0

phpbrew 是一个在你的用户目录中管理多个 PHP 版本的工具

phpbrew 是一个在你的用户目录中管理多个 PHP 版本的工具,最大的好处是不需要 sudo 权限就能轻松切换,非常适合本地开发环境。

下面是完整的安装和使用指南,帮你快速上手。

📦 安装 phpbrew

你需要在终端里执行几个命令。

  1. 下载并安装

    curl -L -O https://github.com/phpbrew/phpbrew/releases/latest/download/phpbrew.phar
    chmod +x phpbrew.phar
    sudo mv phpbrew.phar /usr/local/bin/phpbrew
    

    然后运行 phpbrew init 初始化配置,这会在你用户目录下生成 ~/.phpbrew 文件夹。

  2. 配置 Shell 环境
    为了让 phpbrew 命令在任何终端窗口生效,需要把它加到你的 Shell 配置文件里。

    • 对于 Bash 用户
      echo '[[ -e ~/.phpbrew/bashrc ]] && source ~/.phpbrew/bashrc' >> ~/.bashrc
      source ~/.bashrc
      
    • **对于 Zsh 用户 (macOS 用户) **:
      echo '[[ -e ~/.phpbrew/bashrc ]] && source ~/.phpbrew/bashrc' >> ~/.zshrc
      source ~/.zshrc
      

    如果想了解一个更先进、更现代的方法,可以看看 Laravel Herd,它用起来会更省心。

  3. 安装依赖库
    在编译 PHP 之前,需要安装一些依赖库,这样才能保证 PHP 的核心功能正常。

    • Debian/Ubuntu 系列
      sudo apt update
      sudo apt install -y gcc make autoconf libc-dev pkg-config 
      libxml2-dev libsqlite3-dev libcurl4-openssl-dev libonig-dev 
      libedit-dev libssl-dev libbz2-dev libjpeg-dev libpng-dev 
      libxpm-dev libfreetype6-dev libgmp-dev libgmp3-dev 
      libc-client2007e-dev libkrb5-dev libpspell-dev libicu-dev 
      libenchant-dev libreadline-dev libtidy-dev
      
    • CentOS/RHEL 系列
      sudo yum groupinstall -y "Development Tools"
      sudo yum install -y libxml2-devel sqlite-devel curl-devel libpng-devel 
      libjpeg-devel freetype-devel bzip2-devel libedit-devel openssl-devel 
      gmp-devel libc-client-devel libicu-devel libmcrypt-devel enchant-devel 
      readline-devel libtidy-devel
      

    如果在 macOS 上用,强烈推荐先安装 Homebrew,然后 phpbrew lookup-prefix homebrew,它会自动帮你找到库文件的位置。

▶️ 基础操作:查、装、切

安装好后,这几个最常用的命令一定要掌握。

# 1. 查看所有可安装的 PHP 版本
phpbrew known

# 2. 查看更详细的版本列表
phpbrew known --more

# 3. 安装 PHP 7.4(带默认扩展)
phpbrew install 7.4 +default

# 4. 切个版本试试!
phpbrew switch 7.4

# 5. 想只用一次某个版本?用 use 就行
phpbrew use 7.4

# 6. 看看现在用的是哪个
php -v

🎛️ 进阶技巧:定制你的 PHP

这就是 phpbrew 强大的地方了,你可以像搭乐高一样,自由选择要开启哪些扩展和功能(它们被称为“变体”)。

什么时候用哪个?

  • +default(最省事): 如果你就想马上能用,装它就行,它已经包含了常用的扩展和功能。
  • Web 开发(PHP-FPM + 数据库):
    phpbrew install 8.2 +default +fpm +mysql +sqlite
    
    开发时 +fpm 很方便,+mysql+sqlite 这两个命令能自动配置好数据库支持。
  • 追求性能(+opcache):
    phpbrew install 8.1 +default +fpm +opcache
    
    如果想用上 Opcache 这个字节码缓存工具来提速,在命令里加上 +opcache 就行。
  • 禁用某些功能:
    phpbrew install 7.4 +default -debug -bcmath
    
    用“-”号可以移除你不想要的东西,让 PHP 变得更轻量。

如果安装好之后发现少了什么,可以单独安装扩展:

phpbrew ext install yaml

🤔 常见问题怎么办?

安装老版本或旧版依赖时,有时会遇到一些报错。

  • 安装旧版 PHP 报错 (e.g., 5.x)
    可以试试先更新旧版本列表:

    phpbrew update --old
    
  • configure: error: mcrypt.h not found
    可以用下面这个命令,告诉 phpbrew 去哪里找 libmcrypt

    phpbrew install 5.6 +default -- --with-mcrypt=/usr/local
    
  • configure: error: Please reinstall the libcurl distribution
    安装 libcurl4-openssl-dev 就好了。装完后别忘了清除缓存再试:

    phpbrew purge
    
  • configure: error: jpeglib.h not found.
    像前面说的,需要 libjpeg-dev 这个库。在 Ubuntu/Debian 上可以这样装:

    sudo apt install -y libjpeg-dev
    
  • gcc: error: trying to exec 'cc1plus'
    像前面说的,需要 g++ 这个编译器,用包管理器装就行。例如在 Ubuntu/Debian 上:

    sudo apt install -y g++
    

错误问题 phpbrew update 报错

===> Fetching release list...
Downloading https://www.php.net/releases/index.php?json=1&version=8&max=100 via curl extension
Downloading https://www.php.net/releases/index.php?json=1&version=7&max=100 via curl extension
PHP Warning:  file_put_contents(/root/.phpbrew/php-releases.json): Failed to open stream: No such file or directory in phar:///usr/local/bin/phpbrew/src/PhpBrew/ReleaseList.php on line 129
Exception: Can't store release json file
Trace:

PHP Warning:  Undefined array key "args" in phar:///usr/local/bin/phpbrew/vendor/corneltek/cliframework/src/ExceptionPrinter/DevelopmentExceptionPrinter.php on line 87
PHP Fatal error:  Uncaught TypeError: CLIFramework\ExceptionPrinter\DevelopmentExceptionPrinter::dumpArgs(): Argument #1 ($args) must be of type array, null given, called in phar:///usr/local/bin/phpbrew/vendor/corneltek/cliframework/src/ExceptionPrinter/DevelopmentExceptionPrinter.php on line 87 and defined in phar:///usr/local/bin/phpbrew/vendor/corneltek/cliframework/src/ExceptionPrinter/DevelopmentExceptionPrinter.php:69
Stack trace:
#0 phar:///usr/local/bin/phpbrew/vendor/corneltek/cliframework/src/ExceptionPrinter/DevelopmentExceptionPrinter.php(87): CLIFramework\ExceptionPrinter\DevelopmentExceptionPrinter->dumpArgs()
#1 phar:///usr/local/bin/phpbrew/vendor/corneltek/cliframework/src/ExceptionPrinter/ProductionExceptionPrinter.php(14): CLIFramework\ExceptionPrinter\DevelopmentExceptionPrinter->dumpTraceInPhar()
#2 phar:///usr/local/bin/phpbrew/src/PhpBrew/Console.php(149): CLIFramework\ExceptionPrinter\ProductionExceptionPrinter->dump()
#3 phar:///usr/local/bin/phpbrew/bin/phpbrew(26): PhpBrew\Console->runWithTry()
#4 /usr/local/bin/phpbrew(14): require('...')
#5 {main}
  thrown in phar:///usr/local/bin/phpbrew/vendor/corneltek/cliframework/src/ExceptionPrinter/DevelopmentExceptionPrinter.php on line 69
  • oniguruma-devel 错误
 CentOS 8 / Rocky Linux 8 / AlmaLinux 8
启用 PowerTools 仓库:sudo dnf config-manager --set-enabled PowerTools
安装 EPEL 和依赖包:sudo dnf install epel-release 
然后执行 sudo dnf install oniguruma oniguruma-devel

这个错误是因为 phpbrew 需要获取PHP官方版本的清单,但它在你的 root 用户目录下没有找到存储这个清单的文件。

问题的关键在于当前你使用的是 root 用户,而 phpbrew 本身就是为普通用户免 sudo 权限设计的。作为普通用户,phpbrew 会自然地在 $HOME 目录下创建 .phpbrew/ 这个工作目录并存储清单文件,操作起来会非常顺畅。

你可以试试下面几种方法来快速解决问题。

📝 解决方法

⚠️ 方法一:为 root 用户创建目录(临时方案)

核心命令mkdir -p /root/.phpbrewphpbrew update

如果你坚持继续使用 root 用户,可以手动创建这个缺失的目录。请在终端中按顺序执行:

  1. 创建目录mkdir -p /root/.phpbrew
  2. 重新执行命令phpbrew update

    请注意:尽管 phpbrew 支持 root 用户,但这不符合其设计理念。即便解决了当前问题,在后续编译安装PHP时,root 用户身份依然可能引发各种权限或路径的奇怪错误。

✅ 方法二:切换回普通用户(推荐方案)

核心命令exitsu - <用户名>,然后重新初始化 phpbrew

这是最稳妥、最推荐的解决方案,能从根本上避免后续麻烦。

  1. 切换到你的普通用户账号
    exit
    # 或者 su - 你的用户名
    
  2. 为新用户初始化 phpbrew
    登录普通用户后,你需要重新进行 phpbrew 的初始化,让它自动在普通用户的 $HOME 目录下创建所需的文件夹和文件。
    phpbrew init
    # 然后,根据终端输出的提示,将 source 命令添加到你的 ~/.bashrc 或 ~/.zshrc 文件中
    

对于你这个具体问题,更推荐你尝试 切换回普通用户(方法二),这通常是最优解。如果需要,我很乐意帮你看看切换用户后,如何正确配置 phpbrew 的 bash 环境。


评论