HomebrewでCakePHP環境構築〜Apache編

#httpd.confの設定

パスは``/usr/local/etc/httpd/httpd.conf``。早速編集する。

しかし前提となる知識が明らかに不足しているため、正直なところ途中から自分で何の作業をしているのか、わからなくなってきた。

以下のサイト様には大変お世話になった。それでもパス1つ違うだけで素人は慌ててしまう・・・

[MacにHomebrewでPHP, Apache, MySQLを導入する](http://vdeep.net/homebrew-php-apache-mysql)

以下の内容を、記述したりコメントを外したりする。サーバーやドキュメントルートの設定は何となく理解できるが、途中から知識が怪しくなってくる。

```
Listen 80
```

```
ServerName localhost:80
```

下記のモジュールについての記述は、後に間違いだと判明する・・・

```
LoadModule php7_module /usr/local/opt/php71/libexec/apache2/libphp7.so #記述間違い
```

後半で説明するが、念のため正しい記述をここに載せておく。

```
LoadModule php7_module /usr/libexec/apache2/libphp7.so
```

まだ修正は続く。

```
DocumentRoot "/usr/local/var/www/htdocs"
<Directory "/usr/local/var/www/htdocs">
```

```
DirectoryIndex index.php index.html
```

```
AddType application/x-httpd-php .php
```

```    
Include /usr/local/etc/httpd/extra/httpd-vhosts.conf
```

上記の``Include /usr/local/etc/httpd/extra/httpd-vhosts.conf``はバーチャルホストを利用するためのものらしい。バーチャルホストって何・・・？参考にリンクを貼っておく。

[バーチャルホスト - Wikipedia](https://ja.wikipedia.org/wiki/バーチャルホスト)

次は``/usr/local/etc/httpd/extra/httpd-vhosts.conf``へ移動し、ファイルを編集する。最終的に、コメントされていない箇所は以下の記述だけになる。

```
<VirtualHost *:80>
  ServerName sample.local
  DocumentRoot /usr/local/var/www/htdocs
  DirectoryIndex index.php index.html
  <Directory "/usr/local/var/www/htdocs">
    AllowOverride All
    Allow from All
  </Directory>
</VirtualHost>
```

とにかく進む。

#モジュールがおかしい

先ほど``httpd.conf``にphp71のモジュール``libphp7.so``を記述したが、そこでエラーになる。なお、同箇所をコメントアウトすると正常に起動する。

```
$ sudo apachectl start
Password:
httpd: Syntax error on line 178 of /usr/local/etc/httpd/httpd.conf: Cannot load /usr/local/opt/php71/libexec/apache2/libphp7.so into server: dlopen(/usr/local/opt/php71/libexec/apache2/libphp7.so, 10): image not found
```

このモジュールだが、本来であればPHPインストール時にオプションで指定して入れられるものらしい。今回はモジュール単体でインストールする方法が見つけられなかったので、PHPを再インストールすることにした。

#PHPの再インストール

まずはPHPインストール時のオプションを確認する。

```
$ brew options php71
--with-cgi
	Enable building of the CGI executable (implies --without-fpm)
--with-debug
	Compile with debugging symbols
--with-embed
	Compile with embed support (built as a static library)
--with-enchant
	Build with enchant support
--with-gmp
	Build with gmp support
--with-homebrew-curl
	Include Curl support via Homebrew
--with-homebrew-libressl
	Include LibreSSL instead of OpenSSL via Homebrew
--with-homebrew-libxml2
	Include Libxml2 support via Homebrew
--with-homebrew-libxslt
	Include LibXSLT support via Homebrew
--with-httpd
	Enable building of shared Apache Handler module
--with-imap
	Include IMAP extension
--with-libmysql
	Include (old-style) libmysql support instead of mysqlnd
--with-mssql
	Include MSSQL-DB support
--with-pdo-oci
	Include Oracle databases (requries ORACLE_HOME be set)
--with-pear
	Build with PEAR
--with-phpdbg
	Enable building of the phpdbg SAPI executable
--with-postgresql
	Build with postgresql support
--with-thread-safety
	Build with thread safety
--with-webp
	Build with webp support
--without-bz2
	Build without bz2 support
--without-fpm
	Disable building of the fpm SAPI executable
--without-ldap
	Build without LDAP support
--without-legacy-mysql
	Do not include the deprecated mysql_ functions
--without-mysql
	Remove MySQL/MariaDB support
--without-pcntl
	Build without Process Control support
--without-unixodbc
	Build without unixODBC support
--HEAD
	Install HEAD version
```

今回必要なオプションはこれ。この環境構築も行き当たりばったりだが、こういうときに先を見据えていればよかったと後悔する。

```
--with-httpd
	Enable building of shared Apache Handler module
```

既存のPHPをアンインストール。強制的に実行する。

```
$ brew uninstall --ignore-dependencies php71
Uninstalling /usr/local/Cellar/php71/7.1.13_24... (349 files, 39.4MB)
```

そしてオプション付きで再インストールする。

```
$ brew install php71 --with-httpd
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 2 taps (homebrew/core, homebrew/php).
==> New Formulae
libbitcoin-consensus
==> Updated Formulae
以下略
```

エラーメッセージと思しき表示もあったが、``brew doctor``の方が見やすいのでそちらをチェック。アドバイス通り、``brew install php71``を実行する。

```
$ brew doctor
Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry or file an issue; just ignore this. Thanks!

Warning: Some installed formula are missing dependencies.
You should `brew install` the missing dependencies:
  brew install php71

Run `brew missing` for more details.

$ brew install php71
==> Installing php71 from homebrew/php
==> Downloading https://homebrew.bintray.com/bottles-php/php71-7.1.13_24.high_si
Already downloaded: /Users/yuki/Library/Caches/Homebrew/php71-7.1.13_24.high_sierra.bottle.tar.gz
==> Pouring php71-7.1.13_24.high_sierra.bottle.tar.gz
==> Caveats
The php.ini file can be found in:
    /usr/local/etc/php/7.1/php.ini
以下略
```

今度は大丈夫。

```
$ brew doctor
Your system is ready to brew.
```

#再びhttpd.confの設定

念のためモジュールの場所を確認する。

```
$ locate libphp7.so
/usr/libexec/apache2/libphp7.so
```

Σ（ﾟдﾟlll）
そもそもモジュールの有無というより、場所の指定が問題だったのか・・・

正しいパスを設定後``sudo apachectl start``を実行すると、正常に起動した。

終了は``sudo apachectl stop``で。

```
$ sudo apachectl start
$ sudo apachectl stop
```

こちらもなんとか完了。