こんにちは、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_profilePATH=$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」にはプラグイン機能も有しているそうなので、もっと便利な使い方もあるかもしれません。ではでは、また!
LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。