• LIGの広告成功事例
WEB

phpenv + php-buildでPHPを複数バージョン利用する方法

phpenv + php-buildでPHPを複数バージョン利用する方法

こんにちは、tetsuです。

Webサイトには多種多様な環境があり、テストする環境も同じだけ必要となってきました。PHPを異なるバージョンで同時に利用する場合も、バージョンごとにサーバを用意しなければなりません。

しかし「phpenv」と「php-build」を利用すれば、1つのサーバ内で異なるバージョンのPHPを利用することができるのです。

というわけで今回は、この「phpenv」と「php-build」の導入例を紹介させていただきます。

  • 検証OS

「CentOS6」を利用して検証しています。

必要なパッケージをインストール

まずは「phpenv」と「php-build」の導入の前に、必要なパッケージなどのインストールと設定をおこないます。
(すでにインストール済みのものについては、適宜省略してください。)

EPELレポジトリの追加

CentOSの初期レポジトリではインストールができないパッケージが存在するため、EPELレポジトリを次のようにして追加します。

wget http://ftp.riken.jp/Linux/fedora/epel/RPM-GPG-KEY-EPEL-6
rpm --import RPM-GPG-KEY-EPEL-6
rm -f RPM-GPG-KEY-EPEL-6
rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
sed -i 's/enabled=1/enabled=0/g' /etc/yum.repos.d/epel.repo

RPMパッケージの最新版はこちらから適宜変更のうえ、ダウンロードしてください。

apache拡張ツール「apxs」のインストール

続いて、「apxs」のインストールをおこないます。
こちらは「httpd-devel」パッケージに内包されているので、インストールされていない場合は以下のコマンドでインストールします。

yum install -y httpd httpd-devel

高速で柔軟性のある字句解析器を書くためのツール「re2c」インストール

続いて、EPEL経由で「re2c」のインストールをします。

yum -y --enablerepo=epel install re2c

その他パッケージのインストール

それぞれ説明をしていくと長くなるので、その他のパッケージを以下のコマンドで一括インストールします。

yum -y --enablerepo=epel install git libxml2-devel bison bison-devel openssl-devel curl-devel libjpeg-devel libpng-devel libmcrypt-devel readline-devel libtidy-devel libxslt-devel libmcrypt libmcrypt-devel

「phpenv」のインストール

必要なパッケージをインストール後、「phpenv」をインストールします。

パッケージのインストール

以下のコマンドでGitからクローンし、インストールスクリプトを実行します。

cd
git clone https://github.com/CHH/phpenv.git
cd phpenv/bin
sh phpenv-install.sh

.bash_profileの編集

インストール後、「.bash_profile」ファイルに以下の内容を最終行に追加します。
・~/.bash_profile

PATH=$HOME/.phpenv/bin:$PATH
eval "$(phpenv init -)"

追記が完了後、次のコマンドでShellの再起動をおこないます。

exec -l $SHELL

これで「phpenv」のインストールが完了です。
次のコマンドを実行すると実行結果が表示されます。

phpenv

・実行結果

rbenv 0.4.0-106-gc69d9a1
Usage: rbenv <command> [<args>]

Some useful rbenv commands are:
   commands    List all available rbenv commands
   local       Set or show the local application-specific Ruby version
   global      Set or show the global Ruby version
   shell       Set or show the shell-specific Ruby version
   rehash      Rehash rbenv shims (run this after installing executables)
   version     Show the current Ruby version and its origin
   versions    List all Ruby versions available to rbenv
   which       Display the full path to an executable
   whence      List all Ruby versions that contain the given executable

See `rbenv help <command>' for information on a specific command.
For full documentation, see: https://github.com/sstephenson/rbenv#readme

「php-build」のインストール

続いて、「php-build」をインストールします。

パッケージのインストール

「phpenv」同様に以下のコマンドでGitからクローンし、インストールスクリプトを実行します。

cd
git clone https://github.com/CHH/php-build.git
cd php-build/
sh install.sh

インストールが完了したら、次のコマンドを実行し、実行結果が返ってくるのを確認します。

php-build

・実行結果

php-build, Compile and Install PHP
Version: {{VERSION}}

Usage: php-build [--definitions] [--ini|i <environment>] [<definition>] [<prefix>]

Arguments:
  definition:    What release should be used, as well as release-specific
                 configuration. This is either the name of a builtin definition
                 file (as listed with `--definitions`) or a path to defintion file.
  prefix:        All built Executables, Configs and Libs are placed in this
                 directory. It's created if it doesn't exist.

Options:
  --definitions: Lists all available definitions
  --ini|i:       Specifies which php.ini-<environment> from the
                 source distribution is used as default php.ini

インストール可能なPHPバージョンの確認

ここまでで必要なパッケージ類のインストールが完了です。
次のコマンドを実行し、インストールが可能なPHPバージョンを確認することができます。

php-build --definitions

・実行結果

...
5.6.0beta3
5.6.0beta4
5.6.1
5.6snapshot

「php-build」でPHPのインストール

続いて、実際に指定バージョンのPHPをインストールします。
ここでは「PHP5.6.1」をインストールを例にします。

設定ファイルの調整

PHPのインストールをおこなう前に、設定ファイルにApacheモジュールへのパスを追記します。

vi /usr/local/share/php-build/definitions/5.6.1

対象ファイルの最初の行に以下を追記します。

configure_option "--with-apxs2" "/usr/sbin/apxs"

追加後、保存します。

PHPのインストール

設定ファイルの調整後、以下のコマンドを実行してPHPをインストールします。
また、モジュールファイルをインストールしたバージョン下にコピーします。

php-build 5.6.1  ~/.phpenv/versions/5.6.1
cp /etc/httpd/modules/libphp5.so ~/.phpenv/versions/5.6.1/

インストール後、インストールしたPHPのバージョンで利用するようにコマンドを実行し、設定されたかどうかを確認します。

phpenv global 5.6.1
php -v

PHPのバージョンが正しく認識されない場合、以下のコマンドを実行し、再度パージョンの確認をおこなってください。

phpenv rehash

バージョンの切替

PHPのバージョンを切り替える場合、以下の手順でバージョンの切替をおこなうことが可能です。

例)PHP5.4.33に切替

cp /root/.phpenv/versions/5.4.33/libphp5.so /etc/httpd/modules
phpenv global 5.6.1
service httpd restart

最後に

いかがでしたでしょうか?
これならサーバを複数用意することなく、PHPのバージョン別で検証をおこなうことができます。
また、「phpenv」にはプラグイン機能も有しているそうなので、もっと便利な使い方もあるかもしれません。

ではでは、また!

この記事を書いた人

tetsu
tetsu 管理部 2012年入社
手塚です。LIGの土台を支えています。インフラからプログラミング、果ては経理、会計までと、広い守備範囲でみんなをサポートしています。