今まで手動で Apache の php モジュールを切り替えてたけど、phpenv-apache-version が良いと聞いて環境を変えてみました。
前提条件
Homebrew と Homebrew 経由で MySQL が既に入ってます。
Apache のインストール
まずは apache のインストールから
$ brew tap Homebrew/dupes
$ brew install httpd
ターミナルを再起動してバージョンを念のため確認
$ httpd -v
Server version: Apache/2.2.23 (Unix)
Server built: Mar 22 2013 13:47:14
httpd.conf の編集
/usr/local/etc/apache2/httpd.conf
の最後に以下を追記
# conf.d以下の.confをすべて読み込む
Include /usr/local/etc/apache2/conf.d/*.conf
ディレクトリを作成
$ mkdir /usr/local/etc/apache2/conf.d
ファイルを作成
$ vi /usr/local/etc/apache2/conf.d/_mine.conf
# _mine.conf
ServerName localhost:80
AddType application/x-httpd-php .php
DirectoryIndex index.html index.php
デフォルトのドキュメントルートは
/usr/local/Cellar/httpd/2.2.23/share/apache2/htdocs/
起動を確認
$ sudo apachectl start
http://127.0.0.1/ とりあえず “It works!” が表示されれば OK
$ sudo apachectl stop
で停止
phpenv のインストール
$ brew install phpenv
Error: phpenv is a head-only formula
Install with `brew install --HEAD phpenv
って怒られたので
$ brew install --HEAD phpenv
でインストール
To finish installing phpenv:
* Add ~/.phpenv/bin to your $PATH
* Add "eval $(phpenv init -)" at the end of your ~/.bashrc
* Restart your shell
インストールを完了させるためには ↑ これを実行してね ♥ と出るので以下を実行 ※zsh のひとは.zshrc とかに読み替える
$ echo 'export PATH="$HOME/.phpenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(phpenv init -)"' >> ~/.bash_profile
$ exec $SHELL
php-build をインストール
インストール
$ brew install php-build
利用できるバージョンを確認
$ php-build --definitions
5.2.17
5.3.10
〜長いので中略〜
5.5.0alpha2
5.5snapshot
/usr/local/Cellar/php-build/0.9.0/share/php-build/defaultconfigureoptions を編集
# 削除
--enable-fpm
# 追記
--with-apxs2=/usr/local/sbin/apxs
それでは早速インストールしてみます。
$ php-build 5.4.9 ~/.phpenv/versions/5.4.9
[Info]: Loaded apc Plugin.
[Info]: Loaded pyrus Plugin.
[Info]: Loaded xdebug Plugin.
[Info]: Loaded xhprof Plugin.
[Info]: php.ini-production gets used as php.ini
[Info]: Building 5.4.9 into /Users/snize/.phpenv/versions/5.4.9
[Skipping]: Already downloaded and extracted http://downloads.php.net/stas/php-5.4.9.tar.bz2
[Preparing]: /var/tmp/php-build/source/5.4.9
[Compiling]: /var/tmp/php-build/source/5.4.9
[Pyrus]: Downloading from http://pear2.php.net/pyrus.phar
[Pyrus]: Installing executable in /Users/snize/.phpenv/versions/5.4.9/bin/pyrus
[XDebug]: Downloading http://xdebug.org/files/xdebug-2.2.1.tgz
[XDebug]: Compiling in /var/tmp/php-build/source/xdebug-2.2.1
[XDebug]: Installing XDebug configuration in /Users/snize/.phpenv/versions/5.4.9/etc/conf.d/xdebug.ini
[XDebug]: Cleaning up.
[Info]: The Log File is not empty, but the Build did not fail. Maybe just warnings got logged. You can review the log in /tmp/php-build.5.4.9.20130322153436.log
[Success]: Built 5.4.9 successfully.
途中足りないものはエラーのたびにbrewで追加しました。 次のバージョンをインストールする前に /usr/local/Cellar/httpd/2.2.23/libexec/libphp5.so を ~/.phpenv/versions/5.4.9/libphp5.so に退避
$ php-build 5.3.20 ~/.phpenv/versions/5.3.20
[Info]: Loaded apc Plugin.
[Info]: Loaded pyrus Plugin.
[Info]: Loaded xdebug Plugin.
[Info]: Loaded xhprof Plugin.
[Info]: php.ini-production gets used as php.ini
[Info]: Building 5.3.20 into /Users/snize/.phpenv/versions/5.3.20
[Skipping]: Already downloaded and extracted http://php.net/distributions/php-5.3.20.tar.bz2
[Preparing]: /var/tmp/php-build/source/5.3.20
[Compiling]: /var/tmp/php-build/source/5.3.20
[Pyrus]: Downloading from http://pear2.php.net/pyrus.phar
[Pyrus]: Installing executable in /Users/snize/.phpenv/versions/5.3.20/bin/pyrus
[XDebug]: Downloading http://xdebug.org/files/xdebug-2.2.1.tgz
[XDebug]: Compiling in /var/tmp/php-build/source/xdebug-2.2.1
[XDebug]: Installing XDebug configuration in /Users/snize/.phpenv/versions/5.3.20/etc/conf.d/xdebug.ini
[XDebug]: Cleaning up.
[Info]: The Log File is not empty, but the Build did not fail. Maybe just warnings got logged. You can review the log in /tmp/php-build.5.3.20.20130322161948.log
[Success]: Built 5.3.20 successfully.
同様に /usr/local/Cellar/httpd/2.2.23/libexec/libphp5.so を ~/.phpenv/versions/5.4.9/libphp5.so に退避 新しくバージョンを追加した場合とかには以下を実行する。
$ phpenv rehash
利用可能なバージョンを表示
$ phpenv versions
* system
5.3.20
5.4.9
切り替えてみます。まずはデフォルトの php
$ php -v
PHP 5.3.15 with Suhosin-Patch (cli) (built: Aug 24 2012 17:45:44)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies
次は 5.3.20
$ phpenv global 5.3.20
$ php -v
PHP 5.3.20 (cli) (built: Mar 22 2013 16:25:55)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies
with Xdebug v2.2.1, Copyright (c) 2002-2012, by Derick Rethans
最後は 5.3.20
$ phpenv global 5.4.9
$ php -v
PHP 5.4.9 (cli) (built: Mar 22 2013 16:17:58)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies
with Xdebug v2.2.1, Copyright (c) 2002-2012, by Derick Rethans
※切り替えがうまくいかない時はターミナルを再起動や、パスが通ってるか確認する
phpenv-apache-version のインストール
homebrew からインストールできる phpenv では Apache の php モジュールの切り替えはできないのでgaramon/phpenv-apache-versionを phpenv のプラグインとして利用します。 こちらを参考にインストールしました。 【追記】製作者の方にプラグインとして利用する方法をおすすめ頂きました!php-build を phpenv のプラグインとして利用する – | Creator Life とても便利です感謝!
phpenv について
phpenv はいくつか開発してる方がいるようで機能などが多少違います
- CHH/phpenv · GitHub homebrew でインストールできる。phpenv-apache-version をプラグインとして利用できる。
- phpenv/phpenv · GitHub Dev 版はモジュールの切り替えに対応するが、現段階では動作が安定しない
- humanshell/phpenv · GitHub 上のフォーク まずは phpinfo を表示させるファイルを用意 $ echo ’> /usr/local/Cellar/httpd/2.2.23/share/apache2/htdocs/info.php
早速切り替えてみる
$ phpenv apache-version 5.4.9
Restarting apache...
Password:
Comments
noto: 先日は pull request ありがとうございます。 phpenv-apache-version を update しましたのでご連絡しました。 変更点は、pull request で頂いた方法を内部に組み込み、debian 系も動作するよう対応してます。 これで bashrc に記載してた apache モジュールの格納パスは消去してもらって大丈夫です。 あと、php-build は phpenv のプラグインとして利用できるのでそちらを利用すると補完も効くので便利かと思います。php-build を phpenv のプラグインとして利用する