Mac OS Yosemiteきれいですね。
私はPHPの環境構築をHomebrewとDropboxで行っているのですが、YosemiteになってXcodeやコマンドラインツールまわりが更新されて少々ハマったのでメモしました。
各項目、必要に応じて公式ドキュメントなども見てみてください。
OS X Yosemiteのインストール
AppStoreのアップデートから更新してください。
Xcodeのインストール
OS X Yosemiteでは各種コンパイルにXcodeが必要と要求してくるので、Yosemiteのインストール時にXcodeのインストールまで進まなかった場合は、下記コマンドでXcodeをインストールしてください。
$ xcode-select --install
またはXcodeのアプリから、Command Line Toolsをインストールしてください。ダウンロードにはApple IDが必要です。
Xcode本体を含め、5GBほどあるので結構時間がかかります。
最新版であれば、下記コマンドでXcode Command Line Toolsのパスを確認できます。
$ xcode-select -p
/Library/Developer/CommandLineTools
Homebrew
Homebrewのインストールと設定
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
参考 : Homebrew
Xcodeのコマンドラインツールについてのメッセージが出なかった場合は、念のため下記コマンドを実行します。
$ xcode-select --install
また、途中でJavaのインストールが求められるかもしれません。
指示があればそれに従い、それがなければ下記リンクよりApple公式のMacOS向けのJavaをインストールできます。
http://support.apple.com/kb/DL1572
ついでにGitはHomebrewでインストールして最新のものになるようにしておきます。
$ brew install git
Homebrewのインストールが完了したら、下記を.bashrcなどに追記します。
export PATH=/usr/local/bin:$PATH
export PATH=/usr/local/sbin:$PATH
最後にbrew doctor
でHomebrewの環境をチェックします。
$ brew doctor
Homebrewの使用例
時間が経つとformulaが更新されて今までと同じ名前でインストールできないことがよくあります。
なので必ずbrew search
コマンドでそのformulaが存在するかを毎回確認することをおすすめします。
# Apache2.2系をインストールしたい(そんなもんねぇよと怒られる)
$ brew install httpd22
Error: No available formula for httpd22
# formulaを探す(名前が変わっていた)
$ brew search httpd
darkhttpd libmicrohttpd lighttpd mighttpd2
homebrew/apache/httpd22 homebrew/apache/httpd24 homebrew/head-only/httpdiff
# formulaをインストールする(無事、インストール完了)
$ brew tap homebrew/apache
$ brew install httpd22
# 定期的に更新しましょう
$ brew update
$ brew upgrade
# 定期的にお医者さんにかかりましょう
$ brew doctor
MySQLのインストールと設定
# インストール
$ brew install mysql
# MySQLの起動
$ mysql.server start
# MySQLの停止
$ mysql.server stop
# MySQLの再起動
$ mysql.server restart
# パスワードの変更
# rootユーザのパスワードを変更するには下記コマンドを実行し、新しいパスワードを入力します。
$ mysqladmin -u root password
# rootユーザでログイン
# パスワード入力を求められるので入力して
$ mysql -u root -p
※注意
Homebrewでインストールしたmysqlは、初期設定でKeepAliveがONになっています。そのため、mysql.server stop
コマンドが正しく実行できても、すぐに再起動されるため実際には停止できません。どうしてもmysqlを停止させたくなったときは、KeepAliveをfalseに設定しましょう。
Apacheのインストールと設定
今回はApache2.2系をインストールします。
Apache2.4系はhttpd.confやhttpd-vhost.confなどの設定方法が若干違うので、2.4系が良い方は適宜調べて修正してください。
$ brew tap homebrew/dupes
$ brew tap homebrew/apache
$ brew install httpd22
下記コマンドでApacheのパスを確認します。
$ which apachectl
/usr/local/bin/apachectl
また、Apacheのバージョンも確認します。
$ apachectl -v
Server version: Apache/2.2.31 (Unix)
Server built: Aug 14 2015 08:55:34
httpd.confの修正
Apacheの設定ファイルであるhttpd.confを編集します。
今回は、Dropboxにhtdocsフォルダを作成し、そこをPHPの実行環境にする設定にします。
※php56/php70共通
# 使用するポート番号の設定
# デフォルトで8080かもしれないが、今回は80にする
Listen 80
# php5のモジュールの追加
# ここは後述の方法でHomebrewでPHPをインストールする場合は不要なので注意
LoadModule php5_module /usr/local/opt/php56/libexec/apache2/libphp5.so
# ServerNameの設定
# 上でポート番号を80にしたので、ここも80にする
ServerName localhost:80
# DocumentRootの変更
DocumentRoot "/Users/ユーザ名/Dropbox/htdocs"
# .htaccessでURLのoverwriteを許可 ( Directory "/Users/ユーザ名/Dropbox/htdocs" 内 )
AllowOverride All
# index.phpを使えるように修正 ( IfModule dir_module 内 )
DirectoryIndex index.php index.html
# .phpを実行できるようにMIMEタイプを追加 ( IfModule mime_module内 )
AddType application/x-httpd-php .php
# バーチャルホストを利用できるようにコメントアウトを解除
Include /usr/local/etc/apache2/2.2/extra/httpd-vhosts.conf
※php70の場合
LoadModule php7_module /usr/local/opt/php70/libexec/apache2/libphp7.so
# 以下も追記する必要あり
<FilesMatch .php$>
SetHandler application/x-httpd-php
</FilesMatch>
httpd-vhosts.confの修正
例えばhttp://sample.local
というバーチャルホストでドキュメントルートを~/Dropbox/htdocsにしたい場合、下記のようにバーチャルホストを追加してダミーホストをコメントアウトします。
#
# Virtual Hosts
#
# If you want to maintain multiple domains/hostnames on your
# machine you can setup VirtualHost containers for them. Most configurations
# use only name-based virtual hosts so the server doesn't need to worry about
# IP addresses. This is indicated by the asterisks in the directives below.
#
# Please see the documentation at
# <URL:http://httpd.apache.org/docs/2.2/vhosts/>
# for further details before you try to setup virtual hosts.
#
# You may use the command line option '-S' to verify your virtual host
# configuration.
#
# Use name-based virtual hosting.
#
NameVirtualHost *:80
<VirtualHost *:80>
ServerName sample.local
DocumentRoot /Users/ユーザ名/Dropbox/htdocs
DirectoryIndex index.php index.html
# フレームワークなどの必要性に応じて下記を設定
<Directory "/Users/ユーザ名/Dropbox/htdocs">
AllowOverride All
Allow from All
</Directory>
</VirtualHost>
#
# 基本的な設定はhttpd.confにしているので、実際には下記の4行だけでも素のPHPは動きます。
#
<VirtualHost *:80>
ServerName sample.local
DocumentRoot /Users/ユーザ名/Dropbox/htdocs
</VirtualHost>
#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for all requests that do not
# match a ServerName or ServerAlias in any <VirtualHost> block.
#
#<VirtualHost *:8080>
# ServerAdmin webmaster@dummy-host.example.com
# DocumentRoot "/usr/local/opt/httpd22/docs/dummy-host.example.com"
# ServerName dummy-host.example.com
# ServerAlias www.dummy-host.example.com
# ErrorLog "/usr/local/var/log/apache2/dummy-host.example.com-error_log"
# CustomLog "/usr/local/var/log/apache2/dummy-host.example.com-access_log" common
#</VirtualHost>
#<VirtualHost *:8080>
# ServerAdmin webmaster@dummy-host2.example.com
# DocumentRoot "/usr/local/opt/httpd22/docs/dummy-host2.example.com"
# ServerName dummy-host2.example.com
# ErrorLog "/usr/local/var/log/apache2/dummy-host2.example.com-error_log"
# CustomLog "/usr/local/var/log/apache2/dummy-host2.example.com-access_log" common
#</VirtualHost>
hostsファイルの修正
上記までの設定以外に、バーチャルホストの名前解決をhostsファイルに記述してあげる必要があるので、http://sample.local
をというバーチャルホストで/Dropbox/htdocsを参照したい場合、下記のようにします。
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
#
# バーチャルホストの個人設定
127.0.0.1 sample.local
Dropboxなどに設定ファイルを置いている場合は、元々有るhostsファイルを削除してシンボリックリンクを貼ることで対応できます。
$ cd /private/etc
$ sudo rm -f hosts
$ sudo ln -s ~/Dropbox/パス/hosts
Apacheの起動、停止
下記コマンドでApacheの起動や停止を行います。
まだPHPをインストールしていないので、次の手順であるPHPのインストールが完了したら下記コマンドでApacheが正しく起動できるか確認します。
# Apacheの起動
$ sudo apachectl start
# Apacheの停止
$ sudo apachectl stop
# Apacheの再起動
$ sudo apachectl restart
※Apacheの起動がうまくいかない場合は後述のトラブルシューティングを参照してください。
PHPのインストールと設定
HomebrewでPHPをインストール
# php56
$ brew tap homebrew/php
$ brew install php56 --homebrew-apxs
# php70
$ brew tap homebrew/php
$ brew install php70 --with-homebrew-apxs
上記でエラーが出る場合は、下記もtapしてインストールしてみてください。
$ brew tap homebrew/dupes
$ brew tap homebrew/versions
$ brew tap homebrew/homebrew-php
--with-homebrew-apxs
を指定すると、Apacheのhttpd.confに下記が自動で追記されるので便利です。
(注 : --homebrew-apxs
は廃止され、代わりに--with-homebrew-apxs
を利用するように変更されました。)
# php56
LoadModule php5_module /usr/local/Cellar/php56/5.6.16/libexec/apache2/libphp5.so
# php70
LoadModule php7_module /usr/local/Cellar/php70/7.0.1/libexec/apache2/libphp7.so
逆に、すでにhttpd.confでphp5_moduleを読み込んでいる場合は、該当箇所を削除してからbrew install php56 --with-homebrew-apxs
すると、エラーを吐かずにApacheを起動できるようになると思います。
(依存関係を考慮してインストールしてくれるので)
インストールに失敗する方は、最後にあるトラブルシューティングを参考にしてください。
「PHPのインストールの際に、configure: error: Cannot find libz
というエラーが発生してインストールできない場合の対処法」あたりにひっかかる方が多いかと思います。
インストールが完了したら、php -v
コマンドでPHPのバージョンを確認します。
$ php -v
PHP 7.0.1 (cli) (built: Dec 18 2015 19:20:08) ( NTS )
Copyright (c) 1997-2015 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2015 Zend Technologies
2014/10/21現在でphp55では5.5.18が最新版です。
2015/07/31現在でphp56では5.6.11が最新版です。
2015/12/20現在でphp56では5.6.16、php70では7.0.1が最新版です。
パスを通す
もしHomebrewでインストールしたPHPではなくMacに最初から入っているPHPのバージョンが出る場合には、下記のようにパスを通してシェルを再起動します。
# php56
export PATH="$(brew --prefix homebrew/php/php56)/bin:$PATH"
# php70
export PATH="$(brew --prefix homebrew/php/php70)/bin:$PATH"
php.iniの設定
また、デフォルトではphp.iniが日本語圏に対応していないので、修正します。
date.timezone = Asia/Tokyo
default_charset = "UTF-8"
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.detect_order = UTF-8,SJIS,EUC-JP,JIS,ASCII
mbstring.detect_order
はデフォルトではautoになっていて良さそうに見えますが、autoだとOSの環境によっては正しくエンコーディングされない可能性が生じるので、設定しておいたほうがいいでしょう。
文字コードの決定順序は、PHPのCurlなどでスクレイピングなどをする際の文字化けにも関連していることがあるので、覚えておいて損はないと思います。
その他のモジュール
Xdebugやその他のモジュールが必要な場合は、brew search
で存在するか確認をしてからインストールします。
$ brew search php70
# 表示されるリストの中にXdebugがあればインストール
$ brew install php70-xdebug
Composerのインストール
$ brew install composer
インストールが完了したら、composer -v
を実行して確認します。
FuelPHPのインストール
FuelPHPは2014年10月時点で最新バージョンである1.7.2からは依存関係がComposerで管理できるようになりました。
$ composer create-project fuel/fuel:dev-1.7/master プロジェクト名
Composerで管理されるパッケージの一覧は、ダウンロードされたFuelPHPプロジェクト直下のcomposer.jsonに記述してあります。
Composerをアップデートするには、下記コマンドを実行します。
$ php composer.phar self-update
$ php composer.phar update
インストールが完了したら、FuelPHPの環境変数を設定しておきましょう。
参考:「FuelPHPの環境変数の設定まとめ」
おまけ
トラブルシューティング
brew upgrade
の際に、Error: Formulae found in multiple taps:
と怒られる場合の対処法
# エラー内容
Error: Formulae found in multiple taps:
* homebrew/php/php53
* josegonzalez/php/php53
# 必要のないベンダーをuntap
$ brew untap josegonzalez/php
# アップグレード
$ brew upgrade
Homebrewを使っていたらError: GitHub API rate limit exceeded
と怒られ1時間待たないといけなくなってしまった場合の対処法
brew search
コマンドを利用していると、1時間に60回までというAPIの制限を超えてしまうときがあります。
Error: GitHub API rate limit exceeded for xxx.xxx.xxx.xx. (But here's the good news: Authenticated requests get a higher rate limit. Check out the documentation for more details.)
You may want to create an API token: https://github.com/settings/tokens
and then set HOMEBREW_GITHUB_API_TOKEN.
その場合の対処方法は以下のようになります。
- github.com/setting/tokensでAPIトークンを発行
- そのトークンを以下のように
.bashrc
などに追記 - ターミナルを再起動すると1時間に5000回までリクエストを送信できるようになります
export HOMEBREW_GITHUB_API_TOKEN=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Apacheの起動の際に、Reason: Incompatible library version: libphp5.so requires version 6.0.0 or later, but libaprutil-1.0.dylib provides version 4.0.0
というエラーを吐いてうまくいかない場合の対処法
Apacheの起動や再起動の際に、上記のようなlibphp5.so
に関するエラーが表示される場合、下記手順でphp55を再インストールすると解消されることが多いようです。
$ brew uninstall --force php70
$ brew install php70 --with-homebrew-apxs
Apacheの起動の際に、Macにデフォルトで入っているApacheが80ポートを使用していて起動できない場合の対処法
# MacデフォルトのApacheを停止
$ sudo /usr/sbin/apachectl stop
# MacデフォルトのApacheが自動で再起動しないようにする
$ sudo launchctl unload /System/Library/LaunchDaemons/org.apache.httpd.plist
# 自分でインストールしたApacheの起動
$ sudo apachectl start
PHPのインストールの際に、configure: error: Cannot find libz
というエラーが発生してインストールできない場合の対処法
下記のコマンドを実行してください。
$ sudo xcode-select --install && sudo xcode-select -s /Library/Developer/CommandLineTools
PHPのインストールの際に、configure: error: Cannot find OpenSSL's <evp.h>
のようなエラーが発生してインストールできない場合の対処法
海外でも話題になっているようです。
Mac OSをYosemiteにした人の間で流行っているんだとかw
参考「Yosemite DP - configure: error: Cannot find OpenSSL's 」
対処方法をまとめると、
- Mac OS X Yosemite バージョン10.10にする
- Xcode6.1をインストールする
- プロンプトで
xcode-select --install
コマンドを打って必要なツール群をインストールする - この後
brew update
とbrew upgrade
し、無事brew install php55
ができるようになる
とのことです。
実際に私もこの問題が起きて、実際にこの方法で対処できました。
HomebrewでインストールしたPHPについて
HomebrewでインストールしたPHPは、インストール時に表示される説明にその設定方法の大枠が書いてあります。
参考までにここに添付します。
To enable PHP in Apache add the following to httpd.conf and restart Apache:
LoadModule php5_module /usr/local/opt/php55/libexec/apache2/libphp5.so
The php.ini file can be found in:
/usr/local/etc/php/5.5/php.ini
✩✩✩✩ PEAR ✩✩✩✩
If PEAR complains about permissions, 'fix' the default PEAR permissions and config:
chmod -R ug+w /usr/local/Cellar/php55/5.5.18/lib/php
pear config-set php_ini /usr/local/etc/php/5.5/php.ini
✩✩✩✩ Extensions ✩✩✩✩
If you are having issues with custom extension compiling, ensure that
you are using the brew version, by placing /usr/local/bin before /usr/sbin in your PATH:
PATH="/usr/local/bin:$PATH"
PHP55 Extensions will always be compiled against this PHP. Please install them
using --without-homebrew-php to enable compiling against system PHP.
✩✩✩✩ PHP CLI ✩✩✩✩
If you wish to swap the PHP you use on the command line, you should add the following to ~/.bashrc,
~/.zshrc, ~/.profile or your shell's equivalent configuration file:
export PATH="$(brew --prefix homebrew/php/php55)/bin:$PATH"
To have launchd start php55 at login:
ln -sfv /usr/local/opt/php55/*.plist ~/Library/LaunchAgents
Then to load php55 now:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.php55.plist
各パッケージの削除方法
MySQL
$ brew uninstall mysql
$ rm -rf /usr/local/var/mysql
PHP
brew uninstall php55
brew uninstall php55-xdebug
rm -rf /usr/local/etc/php
rm -rf /usr/local/opt/php55
Apache
$ brew uninstall httpd22
$ rm -rf /usr/local/etc/apache2/2.2
$ rm -rf /usr/local/var/log/apache2