MavericksにphpenvでPHP5.5を入れる
MavericksのデフォルトのPHPは5.4ですが、PHPの複数バージョンの環境を作れるphpenvを使って、PHP5.5を入れてみました。
準備
環境は、Mac OS X 10.9.4 Mavericks です。
デフォルトのPHPは以下のようになっています:
$ which php /usr/bin/php $ php -v PHP 5.4.24 (cli) (built: Jan 19 2014 21:32:15) Copyright (c) 1997-2013 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
事前にphpenvをインストールしておく必要がありますが、まだインストールしていない場合は、以下の記事などを参考にしてください。
phpenvの準備ができたら、インストールするPHPのバージョンを決めます。
以下のコマンドでインストール可能なバージョンを表示できます:
$ phpenv install -l
phpenvのデフォルトオプションは以下のファイルで確認できます:
~/.phpenv/plugins/php-build/share/php-build/default_configure_options
ちなみに、既存のPHPのコンパイルオプションをチェックするには、以下のコマンドを実行します:
$ php -i | grep configure | sed -e 's/ /\n/g'
なお、Macのsedでは\n
が使えないため、Homebrewでgnu-sed
を入れ、sed
の代わりにgsed
を使うと実行できます。
PHPのインストール
インストールするPHPのバージョンとコンパイルオプションが決まったら、実際のインストールを行います。
以下のコマンドで実行できます。
$ CONFIGURE_OPTS="コンパイルオプション" phpenv install 5.5.14
コンパイルオプションがない場合はphpenv
以降の部分を指定します。
このコマンドを実行すると、いくつかワーニングやエラーが出ると思うので、その対処法を説明しておきます。
bisonのワーニング
configure: WARNING: bison versions supported for regeneration of the Zend/PHP parsers: 2.4 2.4.1 2.4.2 2.4.3 2.5 2.5.1 2.6 2.6.1 2.6.2 2.6.3 2.6.4 2.6.5 2.7 (found: 2.3).
これは、PHPでサポートされるbisonがないことが原因です。
念のため、インストールされているbisonを確認します:
$ which bison /usr/bin/bison $ bison --version bison (GNU Bison) 2.3
新しいバージョンをHomebrewで探してみます:
$ brew search bison bison homebrew/versions/bison27 $ brew info bison bison: stable 3.0.2 (bottled)
3.0.2
は残念ながらPHPでサポートされていません。
homebrew/versions/bison27
の方を調べてみます:
$ brew versions bison Warning: brew-versions is unsupported and will be removed soon. You should use the homebrew-versions tap instead: https://github.com/Homebrew/homebrew-versions 3.0.2 git checkout 3868896 /usr/local/Library/Formula/bison.rb 3.0.1 git checkout 4715b3c /usr/local/Library/Formula/bison.rb 3.0 git checkout b744b43 /usr/local/Library/Formula/bison.rb 2.7.1 git checkout 804bcf6 /usr/local/Library/Formula/bison.rb 2.7 git checkout adf87c6 /usr/local/Library/Formula/bison.rb
2.7
はサポートされているので、これをインストールすることにします。
$ cd `brew —prefix` $ pwd /usr/local $ git checkout adf87c6 /usr/local/Library/Formula/bison.rb $ brew install bison ==> Downloading http://ftpmirror.gnu.org/bison/bison-2.7.tar.gz ######################################################################## 100.0% ==> ./configure --prefix=/usr/local/Cellar/bison/2.7 ==> make install ==> Caveats This formula is keg-only, so it was not symlinked into /usr/local. Mac OS X already provides this software and installing another version in parallel can cause all kinds of trouble. Some formulae require a newer version of bison. Generally there are no consequences of this for you. If you build your own software and it requires this formula, you'll need to add to your build variables: LDFLAGS: -L/usr/local/opt/bison/lib ==> Summary /usr/local/Cellar/bison/2.7: 36 files, 1.7M, built in 100 second $ /usr/local/Cellar/bison/2.7/bin/bison --version bison (GNU Bison) 2.7
これで2.7
をインストールできました。
このままではbison
と指定した時に、古い方が実行されてしまうので、/usr/local/bin
にシンボリックリンクを張ります:
$ brew link bison --force Linking /usr/local/Cellar/bison/2.7... 8 symlinks created $ which bison /usr/local/bin/bison
まだ古い方が表示される場合は、PATH
で /usr/local/bin
を /usr/bin
よりも先にします。
$ bison --version bison (GNU Bison) 2.7
re2cのワーニング
configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.
これはHomebrewでインストールします。
$ brew install re2c ==> Downloading https://downloads.sourceforge.net/project/re2c/re2c/0.13.6/re2c- ######################################################################## 100.0% ==> ./configure --prefix=/usr/local/Cellar/re2c/0.13.6 ==> make install /usr/local/Cellar/re2c/0.13.6: 5 files, 304K, built in 25 second
libzのエラー
configure: error: Cannot find libz
これは Command Line Tools がインストールされていないために発生するエラーのようです。
Command Line Tools がインストールされているかどうかをチェックするには、以下のコマンドを実行します:
$ pkgutil --pkg-info=com.apple.pkg.CLTools_Executables No receipt for 'com.apple.pkg.CLTools_Executables' found at '/'.
これは Command Line Tools が見つからないことを意味します。
Command Line Tools をインストールするにはいくつか方法があるようですが、以下のコマンドを実行するのが一番簡単です:
$ xcode-select --install
※xcode-select
はXcodeのインストール先を変更するためのコマンドのようです。
このコマンドを実行すると、ダイアログが表示されるので、「インストール」ボタンをクリックして進めます。
再度インストールをチェックします:
$ pkgutil --pkg-info=com.apple.pkg.CLTools_Executables package-id: com.apple.pkg.CLTools_Executables version: 5.1.0.0.1.1396320587 volume: / location: / install-time: 1406345343 groups: com.apple.FindSystemFiles.pkg-group com.apple.DevToolsBoth.pkg-group com.apple.DevToolsNonRelocatableShared.pkg-group
これでOKです。
参考
- OSX - OS X 10.9 Marvericksでzlibがない - Qiita
- xcode - command line tools for new 10.9 OSX for ruby gems? - Stack Overflow
- xcode - How to check if command line tools is installed - Stack Overflow
- Xcode の Command Line Tools をインストール - Qiita
mcrypt.hのエラー
configure: error: mcrypt.h not found. Please reinstall libmcrypt.
Homebrewでlibmcryptをインストールします:
$ brew install libmcrypt ==> Installing mcrypt dependency: mhash ==> Downloading https://downloads.sourceforge.net/project/mhash/mhash/0.9.9.9/mh ######################################################################## 100.0% ==> ./configure --prefix=/usr/local/Cellar/mhash/0.9.9.9 ==> make install /usr/local/Cellar/mhash/0.9.9.9: 17 files, 508K, built in 33 second ==> Installing mcryp ==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/mcrypt-2.6 ######################################################################## 100.0 ==> Pouring mcrypt-2.6.8.mavericks.bottle.tar.g /usr/local/Cellar/mcrypt/2.6.8: 15 files, 448K
僕の環境では、ここまでのハンドリングでPHPのビルドが成功しました。
インストールしたPHPをアクティブにする
このままだと、php
コマンドが古い方を見てしまうので、インストールした方をアクティブにします:
$ phpenv global 5.5.14 $ phpenv rehash
これで切り替わりました:
$ php -v PHP 5.5.14 (cli) (built: Jul 26 2014 14:15:51) Copyright (c) 1997-2014 The PHP Group Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2014, by Zend Technologies with Xdebug v2.2.5, Copyright (c) 2002-2014, by Derick Rethans
php.iniの設定
今回インストールしたPHPのphp.ini
ファイルは以下の場所にあります:
~/.phpenv/versions/5.5.14/etc/php.ini
設定を確認し、必要に応じて変更します。
php-fpm
僕は Nginx+php-fpm の構成で使っているので、php-fpmについても確認しておきます。
今回のインストールで入ったものは以下の場所にあります:
~/.phpenv/versions/5.5.14/sbin/php-fpm
php
コマンドの方は~/.phpenv/shims
に入っていますが、なぜかphp-fpm
コマンドは入っていません。
この辺はまだきれいでないですね。
なので、php-fpm
コマンドを実行すると、古いものが実行されます。
ここは少し悩みましたが、/usr/local/bin
にシンボリックリンクを張っても、phpenv
コマンドは切り替えてくれないので、ひとまず、以下のエイリアスを定義してメッセージを出すことにしました:
alias php-fpm="echo 'Error: If you use the default, type /usr/sbin/php-fpm'"
これで、通常はフルパスで起動するようにし、パスなしで実行するとメッセージが表示される、という形になります。
バージョンごとにエイリアスを定義しても良いかもしれません。
php-fpmの設定ファイルは、~/.phpenv/versions/5.5.14/etc/
にデフォルトのファイルがあるので、それをコピーして使用します。
$ cd ~/.phpenv/versions/5.5.14/etc/ $ cp php-fpm.conf.default php-fpm.conf
通常はそのままの内容で行けそうですが、必要に応じて変更してください。
あと、自動起動もできると思いますが、僕は手動起動にしているので未調査です。
他にWebサーバー側の設定も必要ですが、PHPとしては、ここまででひと通り使えるはずです。