Bulblub

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”’ >> ~/.bashprofile $ echo ‘eval ”$(phpenv init -)”’ >> ~/.bashprofile $ 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のプラグインとして利用する

Tags:

Tomotsugu Kaneko

Written by Tomotsugu Kaneko who lives and works in Japan. Follow me on Twitter