PHPBrew安装多版本 PHP 到用户根目录的工具
phpbrew 是一个构建、安装多版本 PHP 到用户根目录的工具。
phpbrew 能做什么?
- 配置选项简化为「Variants」,无需担心路径问题。
- 支持使用 PDO,mysql,sqlite,debug 等不同「Variants」编译 PHP。
- 针对不同版本,分别编译 apache php 模块,互不冲突。
- 无需 root 权限将 PHP 安装到用户根目录。
- 集成至 bash / zsh shell 等,易于切换版本。
- 支持自动特性检测。
- 易于安装、启用 PHP 扩展。
- 支持在系统环境下安装多个 PHP。
- 路径检测针对 HomeBrew 以及 MacPorts 进行了优化。
安装需求
在开始之前,请先查看:Requirement(英文)。 确保已安装依赖包的开发版本用于编译 PHP。
安装
curl -L -O https://github.com/phpbrew/phpbrew/raw/master/phpbrew chmod +x phpbrew # Move phpbrew to somewhere can be found by your $PATH sudo mv phpbrew /usr/local/bin/phpbrew
快速入门
急不可待?请直接查看:Quick Start(英文)。
开始使用
接下来,我们假定你有充足的时间来学习,这将会是一个循序渐进的教程——教你如何配置 phpbrew。
初始设置
首先,初始化 Bash Shell 脚本:
phpbrew init
接着在 .bashrc
或 .zshrc
文件增加如下行:
[[ -e ~/.phpbrew/bashrc ]] && source ~/.phpbrew/bashrc
对于 Fish shell 用户,在 ~/.config/fish/config.fish
文件增加如下行:
source ~/.phpbrew/phpbrew.fish
若需要在系统全局(非用户目录)使用 phpbrew,请设置共享的 phpbrew 根目录,例如:
mkdir -p /opt/phpbrew phpbrew init --root=/opt/phpbrew
库路径设置
其次,请设置用于查找库文件的默认前缀,可选值有 macports
,homebrew
,debian
,ubuntu
或是自定义路径。
对于 Homebrew 用户:
phpbrew lookup-prefix homebrew
对于 Macports 用户:
phpbrew lookup-prefix macports
基础用法
列出已知 PHP 版本:
phpbrew known 7.0: 7.0.3, 7.0.2, 7.0.1, 7.0.0 ... 5.6: 5.6.18, 5.6.17, 5.6.16, 5.6.15, 5.6.14, 5.6.13, 5.6.12, 5.6.11 ... 5.5: 5.5.32, 5.5.31, 5.5.30, 5.5.29, 5.5.28, 5.5.27, 5.5.26, 5.5.25 ... 5.4: 5.4.45, 5.4.44, 5.4.43, 5.4.42, 5.4.41, 5.4.40, 5.4.39, 5.4.38 ... 5.3: 5.3.29, 5.3.28 ...
列出更多次要版本:
$ phpbrew known --more
刷新 PHP 发布信息:
$ phpbrew update
刷新旧版本(低于5.4):
请注意:我们不保证能够正确编译 PHP 官方停止维护的版本,请不要提交关于编译旧版本的 Issus,此类 Issue 将不会修复。
$ phpbrew update --old
列出已知的旧版本(低于5.4):
$ phpbrew known --old
编译属于你的 PHP
使用默认参数编译安装 PHP 非常简单:
$ phpbrew install 5.4.0 +default
这里我们推荐使用已包含绝大多数公共参数的 default
(默认)参数集合。如果你需要「最小安装」,删掉default
执行即可。
你可以使用-j
或--jobs
选项启用并行编译,例如:
$ phpbrew install -j $(nproc) 5.4.0 +default
编译完成后执行测试用例:
$ phpbrew install --test 5.4.0
测试环境,且包含调试信息:
$ phpbrew -d install --test 5.4.0
安装旧版本(低于5.3):
$ phpbrew install --old 5.2.13
安装给定主要版本的最新次要版本:
$ phpbrew install 5.6
安装预览版本:
$ phpbrew install 7.2.0alpha1 $ phpbrew install 7.2.0beta2 $ phpbrew install 7.2.0RC3
通过指定的 GitHub tag 或 branch 安装:
$ phpbrew install github:php/php-src@PHP-7.2 as php-7.2.0-dev
安装下一个(非稳定)版本:
$ phpbrew install next as php-7.3.0-dev
清除编译目录
$ phpbrew clean php-5.4.0
Variants
PHPBrew 已经将配置选项整理、合并为「Variants」,你只需简单地指定某个 Variant 即可,phpbrew 会自动在配置过程中检测引用目录、编译选项等。
PHPBrew 提供默认的 Variant ,以及一些虚拟 Variants。 「Default Variant」包含绝大多数公共 Variants; 「Virtual Variants」可包含多个 Variants,使用一个虚拟 Variant 即可一次性启用多个 Variants。
只需执行variants
子命令,即可列出它们:
$ phpbrew variants Variants: all, apxs2, bcmath, bz2, calendar, cgi, cli, ctype, curl, dba, debug, dom, dtrace, editline, embed, exif, fileinfo, filter, fpm, ftp, gcov, gd, gettext, gmp, hash, iconv, icu, imap, inifile, inline, intl, ipc, ipv6, json, kerberos, libgcc, mbregex, mbstring, mcrypt, mhash, mysql, opcache, openssl, pcntl, pcre, pdo, pgsql, phar, phpdbg, posix, readline, session, soap, sockets, sqlite, static, tidy, tokenizer, wddx, xml, xml_all, xmlrpc, zip, zlib, zts Virtual variants: dbs: sqlite, mysql, pgsql, pdo mb: mbstring, mbregex neutral: small: bz2, cli, dom, filter, ipc, json, mbregex, mbstring, pcre, phar, posix, readline, xml, curl, openssl default: bcmath, bz2, calendar, cli, ctype, dom, fileinfo, filter, ipc, json, mbregex, mbstring, mhash, mcrypt, pcntl, pcre, pdo, phar, posix, readline, sockets, tokenizer, xml, curl, openssl, zip everything: dba, ipv6, dom, calendar, wddx, static, inifile, inline, cli, ftp, filter, gcov, zts, json, hash, exif, mbstring, mbregex, libgcc, pdo, posix, embed, sockets, debug, phpdbg, zip, bcmath, fileinfo, ctype, cgi, soap, pcntl, phar, session, tokenizer, opcache, imap, tidy, kerberos, xmlrpc, fpm, dtrace, pcre, mhash, mcrypt, zlib, curl, readline, editline, gd, intl, icu, openssl, mysql, sqlite, pgsql, xml, xml_all, gettext, iconv, bz2, ipc, gmp Using variants to build PHP: phpbrew install php-5.3.10 +default phpbrew install php-5.3.10 +mysql +pdo phpbrew install php-5.3.10 +mysql +pdo +apxs2 phpbrew install php-5.3.10 +mysql +pdo +apxs2=/usr/bin/apxs2
在 Variant 前添加+
前缀,代表启用此 Variant,例如:
+mysql
在 Variant 前添加-
前缀,代表禁用此 Variant,例如:
-mysql
举个例子,假设你使用默认 Variant,并且需要启用数据库支持(mysql,sqlite,postgresql)编译 PHP,只需执行:
$ phpbrew install 5.4.5 +default+dbs
也可以:
$ phpbrew install 5.3.10 +mysql+sqlite+cgi $ phpbrew install 5.3.10 +mysql+debug+pgsql +apxs2 $ phpbrew install 5.3.10 +pdo +mysql +pgsql +apxs2=/usr/bin/apxs2
将 pgsql (PostgreSQL) 扩展编译进 PHP:
$ phpbrew install 5.4.1 +pgsql+pdo
若你的 Mac 上已经安装 postgresql,也可以指定特定目录编译 pgsql 扩展:
$ phpbrew install 5.4.1 +pdo+pgsql=/opt/local/lib/postgresql91/bin
pgsql 的路径即为pg_config
所在目录,你可以在/opt/local/lib/postgresql91/bin
找到它。
另外,你可以使用名为neutral
的 Variant 来纯净编译 PHP:
$ phpbrew install 5.4.1 +neutral
neutral
意味着 phpbrew 不会增加包括--disable-all
在内的任何额外编译参数,但部分用于安装pear
的参数(例如--enable-libxml
)依旧会被添加。
更多细节,请移步:PHPBrew Cookbook(英文)。
拓展配置选项
如果想要传递更多拓展配置变量,你可以这么做:
$ phpbrew install 5.3.10 +mysql +sqlite -- \ --enable-ftp --apxs2=/opt/local/apache2/bin/apxs
切换 PHP 版本
临时切换 PHP 版本:
$ phpbrew use 5.4.22
切换默认 PHP 版本:
$ phpbrew switch 5.4.18
关闭 phpbrew:
$ phpbrew off
若需要启用 Apache PHP 模块,请注释或移除以下设置项:
$ sudo vim /etc/httpd/conf/httpd.conf # LoadModule php5_module /usr/lib/httpd/modules/libphp5.3.21.so # LoadModule php5_module /usr/lib/httpd/modules/libphp5.3.20.so
扩展安装器
请查看:Extension Installer(英文)。
配置 php.ini
配置当前 PHP 版本的 php.ini 文件,只需执行如下命令即可:
$ phpbrew config
如需切换编辑器,可执行如下命令指定 EDITOR 环境变量:
export EDITOR=vim phpbrew config
升级 phpbrew
执行 self-update
即可从 GitHub 的 master
分支安装 phpbrew 最新版本。
$ phpbrew self-update
已安装的 PHP
列出已安装的 PHP:
$ phpbrew list
你可以在 ~/.phpbrew/php
目录找到已安装的 PHP。例如,5.4.20 版本位于:
~/.phpbrew/php/5.4.20/bin/php
你可以手动修改其 php.ini:
~/.phpbrew/php/5.4.20/etc/php.ini
而 PHP 扩展的配置文件位于:
~/.phpbrew/php/5.4.20/var/db
~/.phpbrew/php/5.4.20/var/db/xdebug.ini
~/.phpbrew/php/5.4.20/var/db/apc.ini
~/.phpbrew/php/5.4.20/var/db/memcache.ini
等等...
一键切换目录
切换至 PHP 编译目录:
$ phpbrew build-dir
切换至 PHP dist 目录:
$ phpbrew dist-dir
切换至 PHP etc 目录:
$ phpbrew etc-dir
切换至 PHP var 目录:
$ phpbrew var-dir
PHP FPM
phpbrew 内置一些有用的命令用于管理 php-fpm。使用它们之前,请确认在 PHP 编译时启用了 +fpm
。
启动 php-fpm:
$ phpbrew fpm start
停止 php-fpm:
$ phpbrew fpm stop
列出 php-fpm 模块:
phpbrew fpm module
测试 php-fpm 配置:
phpbrew fpm test
编辑 php-fpm 配置:
phpbrew fpm config
已安装的
php-fpm
位于~/.phpbrew/php/php-*/sbin
目录。对应的
php-fpm.conf
文件位于~/.phpbrew/php/php-*/etc/php-fpm.conf.default
目录。你可以把默认配置复制到自定义路径再使用,例如:
cp -v ~/.phpbrew/php/php-*/etc/php-fpm.conf.default ~/.phpbrew/php/php-*/etc/php-fpm.conf php-fpm --php-ini {php config file} --fpm-config {fpm config file}
安装拓展应用
phpbrew 内置了用来获取部分 PHP 应用的 app 命令。
安装 Composer
$ phpbrew app get composer
安装 PHPUnit
phpbrew app get phpunit
启用版本信息 Prompt
使用"PHPBREW_SET_PROMPT=1"
变量可将 PHP 版本信息加入 Shell Prompt。
此变量默认值为"PHPBREW_SET_PROMPT=0"
(即禁用),将如下行加入~/.bashrc
文件,确保其在source ~/.phpbrew/bashrc
之前,即可启用此功能:
export PHPBREW_SET_PROMPT=1
使用.phpbrew/bashrc
内定义的phpbrew_current_php_version
函数,可将版本信息嵌入到 Shell Prompt。你可以将版本信息设置到 PS1
变量内,例如:
PS1=" \$(phpbrew_current_php_version) \$ "
已知问题
-
对于 PHP-5.3+ 版本,"Building intl 64-bit fails on OS X" https://bugs.php.net/bug.php?id=48795
-
将 GD 扩展编译进 PHP,你需要指定 libpng 目录、libjpeg 目录,例如:
$ phpbrew install php-5.4.10 +default +mysql +intl +gettext +apxs2=/usr/bin/apxs2
-- --with-libdir=lib/x86_64-linux-gnu
--with-gd=shared
--enable-gd-natf
--with-jpeg-dir=/usr
--with-png-dir=/usr
故障排查
请移步:TroubleShooting(英文)。
常见问答
Q: 如何使用不同的参数编译相同 PHP 版本?
A: 截至目前,你可以安装 php-5.x.x 并重命名其目录 /Users/phpbrew/.phpbrew/php/php-5.x.x(例如:php-5.x.x-super),并安装另一个 php5.x.x。