OS X YosemiteにHomebrew + DropboxでPHP環境構築 〜Apache, PHP, MySQL, ComposerをインストールしてFuelPHPの設定まで

More than 3 years have passed since last update.

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などに追記します。


~/.bashrc(または~/.bash_profile)

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共通


/usr/local/etc/apache2/2.2/httpd.conf

# 使用するポート番号の設定

# デフォルトで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の場合


/usr/local/etc/apache2/2.2/httpd.conf

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にしたい場合、下記のようにバーチャルホストを追加してダミーホストをコメントアウトします。


/usr/local/etc/apache2/2.2/extra/httpd-vhosts.conf

#

# 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を参照したい場合、下記のようにします。


/private/etc/hosts

##

# 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ファイルを削除してシンボリックリンクを貼ることで対応できます。


/private/etc

$ 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を利用するように変更されました。)


/usr/local/etc/apache2/2.2/httpd.conf

# 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のバージョンが出る場合には、下記のようにパスを通してシェルを再起動します。


~/.bashrc

# php56

export PATH="$(brew --prefix homebrew/php/php56)/bin:$PATH"

# php70
export PATH="$(brew --prefix homebrew/php/php70)/bin:$PATH"



php.iniの設定

また、デフォルトではphp.iniが日本語圏に対応していないので、修正します。


/usr/local/etc/php/7.0/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回までリクエストを送信できるようになります


~/.bashrc

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 not Starting


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 updatebrew 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

  • Composerのインストール
  • FuelPHPのインストール
  • おまけ