Multiple version management on PHP


  • Phpenv provides to manage versions on PHP
  • You can use php with version which you want
  • Its installing is easier than make install
  • Switching version is only one command


Phpenv is use 'rbenv' what is management system on Ruby. On switching version, phpenv calls rbenv. Then, it switches link to php binary file.

Phpenv has bad habit what conflicts rbenv. If phpenv picked up it, rbenv is disabled. (Perhaps it's not use ruby on the system) Of course, this introduction's way avoids it.

Process of installation

Above way is for CentOs 6.5 If you use other version or OS, Pleaes replace to correct way.

Setup ruby environment

$ git clone https://github.com/sstephenson/rbenv.git ~/rbenv

Set Path

Phpenv requests to call bootstrap command.

Therefore, I made common script which is called by all user on login.

$vi /etc/profile.d/env.sh

Then, write below lines.

export RBENV_ROOT="/usr/local/rbenv"
export PATH
eval "$(rbenv init -)"

After wrote it, let's execute it.

$ source /etc/profile.d/env.sh
$ echo $PATH

And confirm to show path to rbenv

usr/local/rbenv/bin:/usr/local/rbenv/shims:/usr/local/rbenv/bin: ...

Install ruby

Ruby-build provide installing some version of ruby. Then, install ruby!

$ cd ~/rbenv
$ mkdir ./plugins
$ cd ./plugins
$ git clone https://github.com/sstephenson/ruby-build.git ./ruby-build
$ cd ./ruby-build/

# install

After install ruby-build, installing of rbenv is completed. Then, you can install all version of ruby, and use it. Usage is following.

# show all versions you can do
$ rbenv install --list

# install
$ rbenv install x.x.x

# apply ruby to system
$ rbenv global x.x.x

NOTE: 'x.x.x' is ruby's version what you want.

If you done above process, you may use ruby.

$ ruby -v
> ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-linux]

Setup php

The way of phpenv is same as rbenv.

Clone phpenv

git clone https://github.com/CHH/phpenv.git ~/.phpenv

Note: above script is installation file

Install phpenv

Before intstall phpenv, set path of phpenv's core.

# Set path
$ export RBENV_ROOT="/usr/local/phpenv"

# Confirming
$ echo $RBENV_ROOT

# Install
$ cd ./.phpenv/bin/

$ phpenv-install.sh

Note: In this time, I install php into /usr /local

Set path

As rbenv's setup, it also needs to edit shell file in /etc/profile.d.

$ vi /etc/profile.d/env.sh

Rewrite the shell-script.

export RBENV_ROOT="/usr/local/rbenv"

export PHPENV_ROOT="/usr/local/phpenv

export PATH
eval "$(rbenv init -)"
eval "$(phpenv init -)"

Please exec it and confirm path.

$ source /etc/profile.d/env.sh
$ echo $PATH
> /usr/local/rbenv/bin:/usr/local/rbenv/shims: ... /usr/local/phpenv/bin:/root/bin:/usr/local/phpenv/bin

Install php-build

Next, install the system manages each version of php.

$ cd /usr/local/phpenv
$ mkdir ./plugins
$ cd ./plugins
$ git clone https://github.com/CHH/php-build.git ./php-build

Install packages related with php

Installing PHP requests some packages. I used packaging system on CentOS to install these.

If you use system other than CentOS, Please use appropriate packaging manager.


yum localinstall http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

Install php

After install php-build, installing of php is completed. Then, you can install all version of php, and use it. Usage is following.

# show all versions you can do
$ phpenv install --releases

# install
$ php install x.x.x

# apply php to system
$ php global x.x.x

If you done above process, let's try next command.

$ php -v
> PHP 5.6.5 (cli) (built: Feb 16 2015 17:49:35)

Could you see php version?


Switch version

Rbenv and phpenv can switch versions. Usage is following.

$ rbenv global x.x.x
$ phpenv gloabal x.x.x

If you don't know installed version, please use following command. You can see all of versions installed

$ phpenv/rbenv versions

Using compile options

hp-build uses compiling source code when it isntalls php each version. If you want to use options when it install, please do to following steps.

$ vi ~/.phpenv/plugins/php-build/share/php-build/definitions/x.x.x

In this file, please write options you want. Example is following.

configure_option "--with-apxs2=/usr/sbin/apxs --enable-fpm --enable-fileinfo --enable-hash --enable-json --enable-sysvsem --enable-sysvshm --enable-sysvmsg --enable-bcmath --with-bz2 --enable-ctype --with-iconv --enable-ftp --with-gettext --enable-mbstring --with-onig=/usr --with-pcre-regex --with-mysql=mysqlnd --with-mysql-sock=/tmp/mysql.sock --enable-phar --enable-shmop --enable-sockets --enable-simplexml --enable-dom --with-libxml-dir=/usr --enable-tokenizer --with-zlib --with-kerberos=/usr --with-openssl=/usr --enable-soap --enable-zip --with-mhash=yes --without-mm --with-enchant=/usr --with-zlib-dir=/usr --with-gd --enable-gd-native-ttf --with-gmp=/usr --with-jpeg-dir=/usr --with-xpm-dir=/usr/X11R6 --with-png-dir=/usr --with-freetype-dir=/usr --with-imap=/usr --with-imap-ssl --enable-intl --with-t1lib=/usr --with-mcrypt=/usr --with-snmp=/usr"


Each binary file of php is independent. And, php.ini file is too.

The file's path is following.


You have to set configure each versions. Please remember this rule.


Phpenv provides us to support detailed version management on PHP.

If new version is release, you may try it without overwrite currently version.

Or, unfortunately, you have to use older server with lower than php 5.4 ,Phpenv may be help you.

This article may be not enough to use PHP. 😭

It's necessary that PHP works on web-server with phpenv.

ON next time, I gona write about it!

All Rights Reserved

Let's register a Viblo Account to get more interesting posts.