PHPBrew安裝多版本 PHP 到用戶根目錄的工具
phpbrew 是一個(gè)構(gòu)建、安裝多版本 PHP 到用戶根目錄的工具。
phpbrew 能做什么?
- 配置選項(xiàng)簡(jiǎn)化為「Variants」,無需擔(dān)心路徑問題。
- 支持使用 PDO,mysql,sqlite,debug 等不同「Variants」編譯 PHP。
- 針對(duì)不同版本,分別編譯 apache php 模塊,互不沖突。
- 無需 root 權(quán)限將 PHP 安裝到用戶根目錄。
- 集成至 bash / zsh shell 等,易于切換版本。
- 支持自動(dòng)特性檢測(cè)。
- 易于安裝、啟用 PHP 擴(kuò)展。
- 支持在系統(tǒng)環(huán)境下安裝多個(gè) PHP。
- 路徑檢測(cè)針對(duì) HomeBrew 以及 MacPorts 進(jìn)行了優(yōu)化。
安裝需求
在開始之前,請(qǐng)先查看:Requirement(英文)。 確保已安裝依賴包的開發(fā)版本用于編譯 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
快速入門
急不可待?請(qǐng)直接查看:Quick Start(英文)。
開始使用
接下來,我們假定你有充足的時(shí)間來學(xué)習(xí),這將會(huì)是一個(gè)循序漸進(jìn)的教程——教你如何配置 phpbrew。
初始設(shè)置
首先,初始化 Bash Shell 腳本:
phpbrew init
接著在 .bashrc 或 .zshrc 文件增加如下行:
[[ -e ~/.phpbrew/bashrc ]] && source ~/.phpbrew/bashrc
對(duì)于 Fish shell 用戶,在 ~/.config/fish/config.fish 文件增加如下行:
source ~/.phpbrew/phpbrew.fish
若需要在系統(tǒng)全局(非用戶目錄)使用 phpbrew,請(qǐng)?jiān)O(shè)置共享的 phpbrew 根目錄,例如:
mkdir -p /opt/phpbrew phpbrew init --root=/opt/phpbrew
庫路徑設(shè)置
其次,請(qǐng)?jiān)O(shè)置用于查找?guī)煳募哪J(rèn)前綴,可選值有 macports,homebrew,debian,ubuntu 或是自定義路徑。
對(duì)于 Homebrew 用戶:
phpbrew lookup-prefix homebrew
對(duì)于 Macports 用戶:
phpbrew lookup-prefix macports
基礎(chǔ)用法
列出已知 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 發(fā)布信息:
$ phpbrew update
刷新舊版本(低于5.4):
請(qǐng)注意:我們不保證能夠正確編譯 PHP 官方停止維護(hù)的版本,請(qǐng)不要提交關(guān)于編譯舊版本的 Issus,此類 Issue 將不會(huì)修復(fù)。
$ phpbrew update --old
列出已知的舊版本(低于5.4):
$ phpbrew known --old
編譯屬于你的 PHP
使用默認(rèn)參數(shù)編譯安裝 PHP 非常簡(jiǎn)單:
$ phpbrew install 5.4.0 +default
這里我們推薦使用已包含絕大多數(shù)公共參數(shù)的 default(默認(rèn))參數(shù)集合。如果你需要「最小安裝」,刪掉default執(zhí)行即可。
你可以使用-j或--jobs選項(xiàng)啟用并行編譯,例如:
$ phpbrew install -j $(nproc) 5.4.0 +default
編譯完成后執(zhí)行測(cè)試用例:
$ phpbrew install --test 5.4.0
測(cè)試環(huán)境,且包含調(diào)試信息:
$ phpbrew -d install --test 5.4.0
安裝舊版本(低于5.3):
$ phpbrew install --old 5.2.13
安裝給定主要版本的最新次要版本:
$ phpbrew install 5.6
安裝預(yù)覽版本:
$ phpbrew install 7.2.0alpha1 $ phpbrew install 7.2.0beta2 $ phpbrew install 7.2.0RC3
通過指定的 GitHub tag 或 branch 安裝:
$ phpbrew install github:php/[email protected] as php-7.2.0-dev
安裝下一個(gè)(非穩(wěn)定)版本:
$ phpbrew install next as php-7.3.0-dev
清除編譯目錄
$ phpbrew clean php-5.4.0
Variants
PHPBrew 已經(jīng)將配置選項(xiàng)整理、合并為「Variants」,你只需簡(jiǎn)單地指定某個(gè) Variant 即可,phpbrew 會(huì)自動(dòng)在配置過程中檢測(cè)引用目錄、編譯選項(xiàng)等。
PHPBrew 提供默認(rèn)的 Variant ,以及一些虛擬 Variants。 「Default Variant」包含絕大多數(shù)公共 Variants; 「Virtual Variants」可包含多個(gè) Variants,使用一個(gè)虛擬 Variant 即可一次性啟用多個(gè) Variants。
只需執(zhí)行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
舉個(gè)例子,假設(shè)你使用默認(rèn) Variant,并且需要啟用數(shù)據(jù)庫支持(mysql,sqlite,postgresql)編譯 PHP,只需執(zhí)行:
$ 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) 擴(kuò)展編譯進(jìn) PHP:
$ phpbrew install 5.4.1 +pgsql+pdo
若你的 Mac 上已經(jīng)安裝 postgresql,也可以指定特定目錄編譯 pgsql 擴(kuò)展:
$ 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 不會(huì)增加包括--disable-all在內(nèi)的任何額外編譯參數(shù),但部分用于安裝pear的參數(shù)(例如--enable-libxml)依舊會(huì)被添加。
更多細(xì)節(jié),請(qǐng)移步:PHPBrew Cookbook(英文)。
拓展配置選項(xiàng)
如果想要傳遞更多拓展配置變量,你可以這么做:
$ phpbrew install 5.3.10 +mysql +sqlite -- \
--enable-ftp --apxs2=/opt/local/apache2/bin/apxs
切換 PHP 版本
臨時(shí)切換 PHP 版本:
$ phpbrew use 5.4.22
切換默認(rèn) PHP 版本:
$ phpbrew switch 5.4.18
關(guān)閉 phpbrew:
$ phpbrew off
若需要啟用 Apache PHP 模塊,請(qǐng)注釋或移除以下設(shè)置項(xiàng):
$ 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
擴(kuò)展安裝器
請(qǐng)查看:Extension Installer(英文)。
配置 php.ini
配置當(dāng)前 PHP 版本的 php.ini 文件,只需執(zhí)行如下命令即可:
$ phpbrew config
如需切換編輯器,可執(zhí)行如下命令指定 EDITOR 環(huán)境變量:
export EDITOR=vim phpbrew config
升級(jí) phpbrew
執(zhí)行 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
你可以手動(dòng)修改其 php.ini:
~/.phpbrew/php/5.4.20/etc/php.ini
而 PHP 擴(kuò)展的配置文件位于:
~/.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 內(nèi)置一些有用的命令用于管理 php-fpm。使用它們之前,請(qǐng)確認(rèn)在 PHP 編譯時(shí)啟用了 +fpm。
啟動(dòng) php-fpm:
$ phpbrew fpm start
停止 php-fpm:
$ phpbrew fpm stop
列出 php-fpm 模塊:
phpbrew fpm module
測(cè)試 php-fpm 配置:
phpbrew fpm test
編輯 php-fpm 配置:
phpbrew fpm config
已安裝的
php-fpm位于~/.phpbrew/php/php-*/sbin目錄。對(duì)應(yīng)的
php-fpm.conf文件位于~/.phpbrew/php/php-*/etc/php-fpm.conf.default目錄。你可以把默認(rèn)配置復(fù)制到自定義路徑再使用,例如:
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}
安裝拓展應(yīng)用
phpbrew 內(nèi)置了用來獲取部分 PHP 應(yīng)用的 app 命令。
安裝 Composer
$ phpbrew app get composer
安裝 PHPUnit
phpbrew app get phpunit
啟用版本信息 Prompt
使用"PHPBREW_SET_PROMPT=1"變量可將 PHP 版本信息加入 Shell Prompt。
此變量默認(rèn)值為"PHPBREW_SET_PROMPT=0"(即禁用),將如下行加入~/.bashrc文件,確保其在source ~/.phpbrew/bashrc之前,即可啟用此功能:
export PHPBREW_SET_PROMPT=1
使用.phpbrew/bashrc內(nèi)定義的phpbrew_current_php_version函數(shù),可將版本信息嵌入到 Shell Prompt。你可以將版本信息設(shè)置到 PS1 變量內(nèi),例如:
PS1=" \$(phpbrew_current_php_version) \$ "
已知問題
-
對(duì)于 PHP-5.3+ 版本,"Building intl 64-bit fails on OS X" https://bugs.php.net/bug.php?id=48795
-
將 GD 擴(kuò)展編譯進(jìn) 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
故障排查
請(qǐng)移步:TroubleShooting(英文)。
常見問答
Q: 如何使用不同的參數(shù)編譯相同 PHP 版本?
A: 截至目前,你可以安裝 php-5.x.x 并重命名其目錄 /Users/phpbrew/.phpbrew/php/php-5.x.x(例如:php-5.x.x-super),并安裝另一個(gè) php5.x.x。
