phpenv-apache-versionとHomebrewで作るモダンなphp環境

March 22, 2013

今まで手動で 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:

http://127.0.0.1/info.php

Comments

noto: 先日は pull request ありがとうございます。 phpenv-apache-version を update しましたのでご連絡しました。 変更点は、pull request で頂いた方法を内部に組み込み、debian 系も動作するよう対応してます。 これで bashrc に記載してた apache モジュールの格納パスは消去してもらって大丈夫です。 あと、php-build は phpenv のプラグインとして利用できるのでそちらを利用すると補完も効くので便利かと思います。php-build を phpenv のプラグインとして利用する


Profile picture

Webのフロントエンドからバックエンド、プロトタイピングからプロダクションまで。定額の開発サービスも。詳しくはAboutページで。