Edited at

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

More than 3 years have 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