phpenvの導入して複数バージョンのPHPを管理する

More than 1 year has passed since last update.

phpenvとは

複数のバージョンのPHPを管理するツール。
Rubyで使われているrbenvを基にして作成されているようだ(ところどころ名残がある)。

phpenvのインストール

以下のコマンドで、phpenvをインストール。

$ curl -L https://raw.github.com/CHH/phpenv/master/bin/phpenv-install.sh | bash
$ git clone git://github.com/CHH/php-build.git ~/.phpenv/plugins/php-build
$ echo 'export PATH="$HOME/.phpenv/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(phpenv init -)"' >> ~/.bashrc
$ exec $SHELL -l

完了すると、phpenvコマンドが使用できる。

PHPのインストール

以下のコマンドで、PHPのバージョンが確認できる。

$ phpenv install -l

現状、バージョン番号が文字ソートになっているようで、
以下のような並びになっているので注意。

 5.5.1
 5.5.10
 5.5.11
 5.5.12
 5.5.2

例えば、5.5.12をインストールする場合は、
以下のようなコマンドで行う。

$ phpenv install 5.5.12
$ CFLAGS="-g" phpenv install 5.5.12 # コンパイラにオプションを渡す場合

コンパイル時のオプションは、以下のファイルに記載されている。

# デフォルトのオプション
$HOME/.phpenv/plugins/php-build/share/php-build/default_configure_options

# 各バージョンごとの設定
$HOME/.phpenv/plugins/php-build/share/php-build/definitions/5.5.12

オプションなどを変えたいときは、これらのファイルを編集する。

以下のような記述で、バージョンごとにオプションを変更できる。

# オプションを追加する
configure_option "--enable-pcntl"

# オプションを外す
configure_option -D "--with-mysqli"

configure_optionをファイルの一番下に記述したら、
反映されなかったことがあったので、
一番上に記述した方が良いかもしれない。

バージョンを切り替える

以下のコマンドでインストールされているバージョンを確認することができる。

$ phpenv versions
* system (set by /home/uchiko/.phpenv/version)
  5.5.10
  5.5.11
  5.5.7
  5.5.8

以下のコマンドでバージョンを切り替えることができる。

$ phpenv global {version} # 全ディレクトリで使うバージョン
$ phpenv local {version} # カレントディレクトリのみで使うバージョン(.php-versionが作成される)

Apacheとの連携

PHPをインストールするときに、
以下のconfigureオプションを追加する。

configure_option "--with-apxs2" "/usr/local/apache2/bin/apxs"

apxsへのパスは環境依存。以下のコマンドでパスがわかる。

$ which apxs

インストールされていなかったり、PATHが通っていなかったりすると、
のちに適用するパッチがうまく動作しないので、PATHは通す必要がある。

このオプションを追加してインストールすると、
libphp5.soが作成されるのだが、
Apacheのmodulesディレクトリに入れようとしてくるので、
パーミッションエラーが起こる。

この問題に対処するため、
PHPのMakefileで指定されているlibphp5.soの出力場所を、
書き換えるためのパッチをphp-buildに当てた。

$ wget https://gist.githubusercontent.com/memememomo/91f774b1e41b24f99e1e/raw/fe57f9936dae16c5ab186919c1611c8f6a4b1fbc/php-build.patch
$ patch -u $HOME/.phpenv/plugins/php-build/bin/php-build < php-build.patch

パッチは以下の記事で紹介されているものを基にしている。
http://tkuchiki.hatenablog.com/entry/2014/04/08/210022

このパッチを当てた後にPHPをインストールすると、
以下のディレクトリにlibphp5.soが出力される。

$HOME/.phpenv/versions/{version}/libexec/libphp5.so

あとは、modulesにシンボリックを張って、
httpd.confを編集して、Apacheを再起動するとPHPが有効になる。

$ sudo ln -s $HOME/.phpenv/versions/{version}/libexec/libphp5.so /usr/local/apache2/modules/

PHPの設定をしていない場合は、
以下の2行をhttpd.confの適切な場所に追記する。

LoadModule php5_module modules/libphp5.so
AddType application/x-httpd-php .php

Apacheのリスタート。

$ sudo /usr/local/apache2/bin/apachectl restart

PHPが有効になる。

シンボリックリンクなどをうまく使えば、
Apacheで使うPHPの切り替えもスムーズにできる予感。

参考

phpenv+php-build環境の構築と運用
http://d.hatena.ne.jp/hnw/20120828

php-build が libphp5.so を上書きしないようにするパッチ
http://tkuchiki.hatenablog.com/entry/2014/04/08/210022

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.