177
177

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-05-10

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

177
177
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
177
177

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?