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