こんにちは、オークファンの @dz_ こと大平かづみです。
Prologue - はじめに
仕事で使っている Mac OS X で、指定のPHPバージョンを利用するため、 anyenv
で phpenv
をインストールして使ってみることにしました。
anyenv とは?
anyenv は、 renv
(rubyのバージョン管理)、 phpenv
(PHPのバージョン管理)などの **env
を管理するためのツールです。同居させるのは手間だったりするらしく、便利そうです!
作業環境
- Max OS X El Capitan (10.11.4)
-
Homebrew (
brew
) インストール済み - Xcode CLI インストール済み
インストール手順
anyenv
のインストール
早速、anyenv
を導入します。
基本的には、 anyenv のインストール手順に従い、以下のコマンドを実行します。( GitHub の手順では、 .bash_profile
が .your_profile
を記述されてるのでご留意ください。)
$ git clone https://github.com/riywo/anyenv ~/.anyenv
$ echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(anyenv init -)"' >> ~/.bash_profile
$ exec $SHELL -l
anyenv
を使って phpenv
をインストール
次に、 anyenv
で phpenv
をインストールします。
# phpenv をインストール
$ anyenv install phpenv
# シェルを再読み込み
$ exec $SHELL -l
phpenv
を使って php のバージョン指定してインストール
# インストール可能なPHPバージョンの列挙
$ phpenv install -l
# バージョンを指定して PHP インストール
$ phpenv install {バージョン}
# シェルを再読み込み
$ exec $SHELL -l
# インストールしたバージョンを確認
$ phpenv versions
# システム全体で使用する PHPバージョンを指定する
$ phpenv global {バージョン}
以上で、 php を任意のバージョンで利用することができました!
トラブルシューティング
ちなみに、途中で以下のトラブルに引っかかったので、対処法を残しておきます。
libmcrypt
がなくエラーの場合
エラー内容
$ phpenv install 5.6.9
[Info]: Loaded extension plugin
[Info]: Loaded apc Plugin.
[Info]: Loaded composer Plugin.
[Info]: Loaded github Plugin.
[Info]: Loaded uprofiler Plugin.
[Info]: Loaded xdebug Plugin.
[Info]: Loaded xhprof Plugin.
[Info]: php.ini-production gets used as php.ini
[Info]: Building 5.6.9 into ~/.anyenv/envs/phpenv/versions/5.6.9
[Downloading]: https://secure.php.net/distributions/php-5.6.9.tar.bz2
[Preparing]: /var/tmp/php-build/source/5.6.9
-----------------
| BUILD ERROR |
-----------------
Here are the last 10 lines from the log:
-----------------------------------------
configure: WARNING: This bison version is not supported for regeneration of the Zend/PHP parsers (found: 2.3, min: 204, excluded: 3.0).
configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.
configure: error: mcrypt.h not found. Please reinstall libmcrypt.
-----------------------------------------
The full Log is available at '/tmp/php-build.5.6.9.20160420144448.log'.
[Warn]: Aborting build.
対処
libmcrypt
がなかったためなので、インストールしました。
$ brew install libmcrypt
openssl
がなくエラーの場合
エラー内容
$ phpenv install 5.6.9
[Info]: Loaded extension plugin
[Info]: Loaded apc Plugin.
[Info]: Loaded composer Plugin.
[Info]: Loaded github Plugin.
[Info]: Loaded uprofiler Plugin.
[Info]: Loaded xdebug Plugin.
[Info]: Loaded xhprof Plugin.
[Info]: php.ini-production gets used as php.ini
[Info]: Building 5.6.9 into ~/.anyenv/envs/phpenv/versions/5.6.9
[Skipping]: Already downloaded and extracted https://secure.php.net/distributions/php-5.6.9.tar.bz2
[Preparing]: /var/tmp/php-build/source/5.6.9
[Compiling]: /var/tmp/php-build/source/5.6.9
-----------------
| BUILD ERROR |
-----------------
Here are the last 10 lines from the log:
-----------------------------------------
^
/var/tmp/php-build/source/5.6.9/ext/libxml/libxml.c:493:22: warning: assigning to 'char *' from 'xmlChar *' (aka 'unsigned char *') converts between pointers to integer types with different sign [-Wpointer-sign]
error_copy.message = xmlStrdup(msg);
^ ~~~~~~~~~~~~~~
2 warnings generated.
/var/tmp/php-build/source/5.6.9/ext/openssl/openssl.c:44:10: fatal error: 'openssl/evp.h' file not found
#include <openssl/evp.h>
^
1 error generated.
make: *** [ext/openssl/openssl.lo] Error 1
-----------------------------------------
The full Log is available at '/tmp/php-build.5.6.9.20160420144812.log'.
[Warn]: Aborting build.
対処
OpenSSL は Mac OS X に標準でインストールされていますが、 brew から参照できなかったためにこのエラーが発生したようです。以下のように、 brew
からリンクすることで対処できました。
$ brew link openssl --force
Epilogue - おわりに
当初、 brew
で phpenv
をインストールしようとして、思った以上に手間取り苦戦してたところ、 anyenv
に出会って事なきを得ました。快適になりました!