phpenv で複数の PHP 環境を管理する
phpenv とは
複数のバージョンの PHP を管理し, コマンドで簡単に切り替えるためのものです.
Ruby でいう rbenv や RVM, Perl でいうところの perlbrew にあたるものです.
なお, phpenv の中身は rbenv を流用することで動いています.
インストール
まず, 以下のコマンドでインストールスクリプトを実行します.
$ curl https://raw.github.com/CHH/phpenv/master/install.sh | sh
中では rbenv を git clone していたりするので, Git をインストールしている必要があります.
上記コマンドが成功したら, ~/.bashrc もしくは zsh 使いなら ~/.zshrc に以下のコマンドを追記します.
あとはいま編集したファイルを再度読み込み直すことでインストールは完了です.
# bash の場合 $ source ~/.bashrc # zsh の場合 $ source ~/.zshrc
# phpenv export PATH=$HOME/.phpenv/bin:$PATH eval "$(phpenv init -)"
rbenv をインストールしている場合
先にも書きましたが, phpenv は rbenv を利用した作りになっています.
その関係もあって, PATH の設定は rbenv が phpenv よりも先になっていないと, 正常に動作しません.
~/.bashrc や ~/.zshrc の設定は, 例えば以下のようにする必要があるので注意が必要です.
# rbenv & phpenv export PATH=$HOME/.rbenv/bin:$HOME/.phpenv/bin:$PATH eval "$(rbenv init -)" eval "$(phpenv init -)"
PHP のインストール
phpenv は PHP の環境を管理するためのものであって, RVM や perlbrew のようにインストールするための機能はありません.
その点は rbenv も同様です.
rbenv では ruby-build を使って Ruby をインストールしますが, phpenv では php-build というツールを使うことができます.
php-build のインストールについては以下の記事を参考にしてください.
php-build で PHP 5.4.0 beta1 をビルドする
以下は php-build のインストールを済ませた, という前提で進めます.
phpenv で管理できるようにインストールするには, ~/.phpenv/versions ディレクトリ内にサブディレクトリを作って, それぞれのバージョンの PHP をインストールする必要があるので, 以下のようにします.
$ php-build 5.4.0beta2 ~/.phpenv/versions/5.4.0beta2
インストールが完了すれば phpenv の管理下に置かれることになります.
$ phpenv versions 5.4.0beta1 * 5.4.0beta2 (set by /home/yuya/.phpenv/version)
使用する PHP のバージョンを切り替える
以下のようなのコマンドで, インストール済みの PHP のバージョンを切り替えることができます.
$ phpenv global 5.4.0beta2
その他, 使い方は基本的に rbenv と同様なので, そちらを参考にしてください.
phpenv と php-build の連携
php-build でのビルドでも充分に簡単ですが, せっかくなので phpenv と連携させてもっと簡単にしてみましょう.
以下のようなコマンドだけで好きなバージョンの PHP をビルドし, phpenv の管理下にインストールできるようにします.
$ phpenv install 5.4.0beta2
rbenv でも ruby-build と連携することで rbenv install というサブコマンドを利用することができるようになります.
そこで, rbenv install するためのスクリプト rbenv-install を流用して, こんなものを用意してみました.
#!/usr/bin/env bash | |
set -e | |
[ -n "$RBENV_DEBUG" ] && set -x | |
# Provide rbenv completions | |
if [ "$1" = "--complete" ]; then | |
exec php-build --definitions | |
fi | |
if [ -z "$RBENV_ROOT" ]; then | |
RBENV_ROOT="${HOME}/.phpenv/libexec" | |
fi | |
DEFINITION="$1" | |
case "$DEFINITION" in | |
"" | -* ) | |
{ echo "usage: phpenv install VERSION" | |
echo | |
echo "Available versions:" | |
php-build --definitions | sed 's/^/ /' | |
echo | |
} >&2 | |
exit 1 | |
;; | |
esac | |
VERSION_NAME="${DEFINITION##*/}" | |
PREFIX="${RBENV_ROOT}/versions/${VERSION_NAME}" | |
php-build "$DEFINITION" "$PREFIX" | |
phpenv rehash |
このスクリプトを ~/.phpenv/libexec/rbenv-install として保存するだけでインストールは完了です.
これで先のような phpenv install サブコマンドが使えるようになっています.