PHPBrew
Read this in other languages: English, Português - BR, 日本語.
phpbrew builds and installs multiple version php(s) in your $HOME directory.
What phpbrew can do for you:
- Configure options are simplified into variants, no worries about the path anymore!
- Build php with different variants like PDO, mysql, sqlite, debug ...etc.
- Compile apache php module and separate them by different versions.
- Build and install php(s) in your home directory, so you don't need root permission.
- Switch versions very easily and is integrated with bash/zsh shell.
- Automatic feature detection.
- Install & enable php extensions into current environment with ease.
- Install multiple php into system-wide environment.
- Path detection optimization for HomeBrew and MacPorts.
Requirement
Please see Requirement before you get started. you need to install some development packages for building PHP.
INSTALL
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/phpbrewQUICK START
Please see Quick Start if you're impatient. :-p
GETTING STARTED
OK, I assume you have more time to work on this, this is a step-by-step tutorial that helps you get started.
Setting up
Init a bash script for your shell environment:
phpbrew initAdd these lines to your .bashrc or .zshrc file:
[[ -e ~/.phpbrew/bashrc ]] && source ~/.phpbrew/bashrcFor fish shell users, add following lines to your ~/.config/fish/config.fish file:
source ~/.phpbrew/phpbrew.fishIf you're using system-wide phpbrew, you may setup a shared phpbrew root, for example:
mkdir -p /opt/phpbrew
phpbrew init --root=/opt/phpbrewSetting up lookup prefix
You may setup your prefered default prefix for looking up libraries, available
options are macports, homebrew, debian, ubuntu or a custom path:
For Homebrew users:
phpbrew lookup-prefix homebrewFor Macports users:
phpbrew lookup-prefix macportsBasic usage
To list known versions:
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 ...To show more minor versions:
$ phpbrew known --moreTo update the release info:
$ phpbrew updateTo get older versions (less than 5.4)
Please note that we don't guarantee that you can build the php versions that are not supported by offical successfully, please don't fire any issue about the older versions, these issues won't be fixed.
$ phpbrew update --oldTo list known older versions (less than 5.4)
$ phpbrew known --oldStarting Building Your Own PHP
Simply build and install PHP with default variant:
$ phpbrew install 5.4.0 +defaultHere we suggest default variant set, which includes most commonly used
variants, if you need a minimum install, just remove the default variant set.
You can enable parallel compilation by passing -j or --jobs option and
the following is an example:
$ phpbrew install -j $(nproc) 5.4.0 +defaultWith tests:
$ phpbrew install --test 5.4.0With debug messages:
$ phpbrew -d install --test 5.4.0To install older versions (less than 5.3):
$ phpbrew install --old 5.2.13To install the latest patch version of a given release:
$ phpbrew install 5.6To install a pre-release version:
$ phpbrew install 7.2.0alpha1
$ phpbrew install 7.2.0beta2
$ phpbrew install 7.2.0RC3To install from a GitHub tag or branch name:
$ phpbrew install github:php/php-src@PHP-7.2 as php-7.2.0-devTo install the next (unstable) version:
$ phpbrew install next as php-7.3.0-devCleaning up build directory
$ phpbrew clean php-5.4.0Variants
PHPBrew arranges configure options for you, you can simply specify variant name, and phpbrew will detect include paths and build options for configuring.
PHPBrew provides default variants and some virtual variants, to the default variants, which includes the most commonly used variants, to the virtual variants, which defines a variant set, you may use one virtual variant to enable multiple variants at one time.
To check out what is included in these variants, simply run variants
subcommand to list these 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/apxs2To enable one variant, simply add a prefix + before the variant name, eg
+mysql
To disable one variant, simply add a prefix - before the variant name.
-debug
For example, if we want to build PHP with the default options and database supports (mysql, sqlite, postgresql), you may simply run:
$ phpbrew install 5.4.5 +default+dbsYou may also build PHP with extra variants:
$ 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/apxs2To build PHP with pgsql (PostgreSQL) extension:
$ phpbrew install 5.4.1 +pgsql+pdoOr build pgsql extension with postgresql base dir on Mac OS X:
$ phpbrew install 5.4.1 +pdo+pgsql=/opt/local/lib/postgresql91/binThe pgsql path is the location of pg_config, you could find pg_config in the /opt/local/lib/postgresql91/bin
To build PHP with neutral compile options, you can specify neutral virtual variant, which means that phpbrew
doesn't add any additional compile options including --disable-all. But some options(for example --enable-libxml)
are still automatically added to support pear installation.
You can build PHP with neutral:
$ phpbrew install 5.4.1 +neutralFor more details, please check out PHPBrew Cookbook.
Extra Configure Options
To pass extra configure arguments, you can do this:
$ phpbrew install 5.3.10 +mysql +sqlite -- \
--enable-ftp --apxs2=/opt/local/apache2/bin/apxsUse And Switch
Use (switch version temporarily):
$ phpbrew use 5.4.22Switch PHP version (switch default version)
$ phpbrew switch 5.4.18Turn Off:
$ phpbrew offIf you enable apache PHP modules, remember to comment out or remove the settings.
$ 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.soList installed PHP
$ phpbrew listThe Extension Installer
Configuring the php.ini for current php version
Simply run:
$ phpbrew configYou may specify the EDITOR environment variable to your favorite editor:
export EDITOR=vim
phpbrew configUpgrade phpbrew
To upgrade phpbrew, you may simply run the self-update command,
this command enables you to install the latest version of
master branch from GitHub:
$ phpbrew self-updateThe Installed PHP(s)
The installed phps are located in ~/.phpbrew/php, for example, php 5.4.20 is located at:
~/.phpbrew/php/5.4.20/bin/php
And you should put your configuration file in:
~/.phpbrew/php/5.4.20/etc/php.ini
Extension configuration files should be put in:
~/.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
... etc
Quick commands to switch between directories
Switching to PHP build directory
$ phpbrew build-dirSwitching to PHP dist directory
$ phpbrew dist-dirSwitching to PHP etc directory
$ phpbrew etc-dirSwitching to PHP var directory
$ phpbrew var-dirPHP FPM
phpbrew also provides useful fpm managing sub-commands. to use them, please
remember to enable +fpm variant when building your own php.
To start php-fpm, simply type:
$ phpbrew fpm startTo stop php-fpm, type:
$ phpbrew fpm stopTo show php-fpm modules:
phpbrew fpm moduleTo test php-fpm config:
phpbrew fpm testTo edit php-fpm config:
phpbrew fpm configThe installed
php-fpmis located in~/.phpbrew/php/php-*/sbin.The correspond
php-fpm.confis located in~/.phpbrew/php/php-*/etc/php-fpm.conf.default, you may copy the default config file to the desired location. e.g.,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}
Installing Extra Apps
phpbrew provides app command to fetch some php apps.
Installing composer
$ phpbrew app get composerInstalling phpunit
phpbrew app get phpunitEnabling Version Info Prompt
To add PHP version info in your shell prompt, you can use
"PHPBREW_SET_PROMPT=1" variable.
The default is "PHPBREW_SET_PROMPT=0" (disable). To enable it, you can add this
line to your ~/.bashrc file and put this line before you source
~/.phpbrew/bashrc.
export PHPBREW_SET_PROMPT=1To embed version info in your prompt, you can use
phpbrew_current_php_version shell function, which is defined in .phpbrew/bashrc.
and you can set the version info in your PS1 var.
e.g.
PS1=" \$(phpbrew_current_php_version) \$ "Known Issues
-
For PHP-5.3+ versions, "Building intl 64-bit fails on OS X" https://bugs.php.net/bug.php?id=48795
-
To build PHP with GD extension, you need to specify your libpng dir and libjpeg dir, for example,
$ 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
Please see TroubleShooting
FAQ
Q: How do I have the same version with different compile option?
A: Currently, you can install php5.x.x and rename the /Users/phpbrew/.phpbrew/php/php-5.x.x folder to the new name, for example, php-5.x.x-super , and install another php-5.3.3
Contribution
Please see Contribution
Documentation
Please see Wiki
Author
- Yo-An Lin (c9s)
- Márcio Almad
License
See LICENSE file.

