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をインストールしておく必要がありますが、まだインストールしていない場合は、以下の記事などを参考にしてください。

Mavericksにphpenvを入れる - IT探検記

phpenvの準備ができたら、インストールするPHPのバージョンを決めます。

以下のコマンドでインストール可能なバージョンを表示できます:

$ phpenv install -l

そして、PHPコンパイルオプションを決めます。

phpenvのデフォルトオプションは以下のファイルで確認できます:

~/.phpenv/plugins/php-build/share/php-build/default_configure_options

ちなみに、既存のPHPコンパイルオプションをチェックするには、以下のコマンドを実行します:

$ php -i | grep configure | sed -e 's/ /\n/g' 

なお、Macsedでは\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-selectXcodeのインストール先を変更するためのコマンドのようです。

このコマンドを実行すると、ダイアログが表示されるので、「インストール」ボタンをクリックして進めます。

再度インストールをチェックします:

$ 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です。

参考

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の設定

今回インストールしたPHPphp.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としては、ここまででひと通り使えるはずです。