Macで新しめのPHPを使うには、XAMPPやphpenvなどいくつかの方法があるが、Homebrewでもインストールできる。
(参考)MacにあたらしめなPHPを簡単便利に入れる方法たくさん - uzullaがブログ
以前はjosegonzalez/phpなどの外部リポジトリを使う必要があったが、現在はPHP関連のbrewがHomebrew/homebrew-phpとしてまとめて整備された。なのでHomebrewでインストールするのはXAMPPの次くらいに簡単になっている。
- 何も考えずApache+PHP+MySQLを簡単に動かしたい人、既存の環境と分離したい人はXAMPPを、
- 複数バージョンを使い分けたい上級者であればphpenvを、
- 最新のPHPを使いたいけどphpenvはしんどすぎるという人はHomebrewを、
となるだろうか。
今回はPHP(とApacheも)をHomebrewでインストールし、mod_phpではなくPHP-FPMでPHPを動かしてみる。
準備
Homebrew ApacheとHomebrew PHPに従いインストールしていく。
まず必要なリポジトリをbrew tap
で追加する。
-
homebrew/dupes
:Macに既に入っているソフトの最新版/バグ修正版を提供する -
homebrew/versions
:古いバージョンのソフトを提供する
brew tap homebrew/dupes
brew tap homebrew/versions
brew tap homebrew/homebrew-php
brew tap homebrew/apache
各ソフトのインストールオプションはbrew options パッケージ名
で確認できる。
brew options php56
Apache(2.4)をインストールする
HomebrewのApacheはsudoなしで起動できるように、デフォルトでは8080番ポートを使うように設定されている。
--with-privileged-ports
を指定すると80番ポートを使うようにできる。
また、MPMもデフォルトではPreforkとなっているが、今回はPHP-FPMを使うのでPrefork MPMにしなくてもよい。
--with-mpm-event
でApache2.4から標準のEvent MPMを使うようにする。
Mac起動時に自動起動するにはインストール後のメッセージに従い、LaunchDaemons/LaunchAgentsに登録する。
-
--with-privileged-ports
:8080番ポートではなく80番ポートを使う -
--with-mpm-event
:Event MPMを使う - インストール後のメッセージに従い、自動起動させるようにする
brew install httpd24 --with-privileged-ports --with-mpm-event
# `--with-privileged-ports`を指定した場合
sudo cp -v /usr/local/Cellar/httpd24/2.4.10/homebrew.mxcl.httpd24.plist /Library/LaunchDaemons
sudo chown -v root:wheel /Library/LaunchDaemons/homebrew.mxcl.httpd24.plist
sudo chmod -v 644 /Library/LaunchDaemons/homebrew.mxcl.httpd24.plist
sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.httpd24.plist
# `--with-privileged-ports`を指定しなかった場合
ln -sfv /usr/local/opt/httpd24/*.plist ~/Library/LaunchAgents
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.httpd24.plist
PHP(5.6)をインストールする
--with-fpm
でPHP-FPMを使うようにして、PHPをインストールする。結構時間がかかる。
-
--with-fpm
:PHP-FPMを有効化する - Apacheと同様、自動起動させる
brew install php56 --with-fpm
ln -sfv /usr/local/opt/php56/*.plist ~/Library/LaunchAgents
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.php56.plist
起動・停止
自動起動する設定にしていれば、既にApacheがlocalhostで起動している。アクセスして「It works!」と表示されればOK。
起動・停止は以下のように行う。長いのでalias
とかしておくといいかも
# Apache(80番ポートを使うためsudoが必要)
sudo launchctl unload /Library/LaunchDaemons/homebrew.mxcl.httpd24.plist
sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.httpd24.plist
# PHP-FPM
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.php56.plist
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.php56.plist
パス設定
ApacheやPHPはMacに標準添付されているので、そのままだとそちらが優先されてしまう。
which apachectl
を実行して/usr/local/bin/apachectl
となっていなければ、/usr/local
以下が優先されるようにPATHの設定をしておく。
echo 'export PATH="/usr/local/bin:/usr/local/sbin:$PATH"' >> ~/.bash_profile
exec $SHELL -l
PHP-FPMの設定
ApacheをPHP-FPMと連携させるには、mod_proxy_fcgi
を使うのが現在では一般的のようだ。
/usr/local/etc/apache2/2.4/httpd.conf
を編集する。
# 125行目付近:コメントを外し、必要なモジュールを有効化
LoadModule proxy_module libexec/mod_proxy.so
LoadModule proxy_fcgi_module libexec/mod_proxy_fcgi.so
あとは最低限、
DirectoryIndex index.php index.html
<FilesMatch \.php$>
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
と設定すれば動く。
お好みのバーチャルホスト設定をするならそこに書けばいいし、デフォルト設定でよければhttpd.conf
の最後にこのように書く。
<VirtualHost *:80>
ServerName localhost
DocumentRoot "/usr/local/var/www/htdocs"
DirectoryIndex index.php index.html
<FilesMatch \.php$>
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
</VirtualHost>
ファイル名が.php
で終わる場合、127.0.0.1:9000
で起動するFastCGI(=PHP-FPM)に処理を任せる、となる。
ProxyPassMatch
を使う方法もあるが、様々な問題があるので推奨されていない(ApacheでPHP-FPMを動かすなら、ProxyPassMatchではなくSetHandlerを使うのがいいらしい - Qiita)
設定したら、
apachectl configtest
で設定ファイルをチェックし、Syntax OK
と出れば問題なし。
(なんかメッセージが出るがこれは無視してよい。気持ち悪ければ、ServerName localhost
とhttpd.confの上の方に書いてきちんとServerNameを設定しておく)
終わったらApacheを再起動する
sudo launchctl unload /Library/LaunchDaemons/homebrew.mxcl.httpd24.plist && sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.httpd24.plist
設定確認
/usr/local/var/www/htdocs/
にindex.php
を作成し、
<?php
phpinfo();
と書いて、localhostにアクセスし、phpinfoの画面が表示されれば無事設定完了となる。
あとはきちんとバーチャルホストを作ったり、MySQLをインストールするなりしていく。