macOS（Monterey）で PHP を動かす

# はじめに

廃棄予定だった [HTML の参考書](https://amzn.asia/d/2JiazU3)に掲載されていたPHP のサンプルコード（後述）を
手持ちの MacBook の Apache で動かしたところ、以下のようなレスポンスページ
（PHPのコードが丸見えのプログラムが動いてない状態）となり、
```
print_r($_POST);
		?>
```
環境を整える必要性に気付きました。

最終的に以下の作業を行ったため、
- macOS に PHP をインストール
- macOS に Apache をインストール
- インストールした Apache の設定

勉強になったことを備忘録をかねて残したいと思います。

# 0. HomeBrewのインストール（事前準備）
詳細は後述しますが、macOS Monterey で PHP を動かすためには、
PHP および Apache のインストールが必要です。
macOS は　HomeBrew でパッケージ管理をするので、
まずは HomeBrew をインストールします。

ただ、私が持っている MacBook が人から譲り受けたものだったためか、
自分の環境には既に HomeBrew がインストールされていました。

```
# HomeBrew のバージョン確認
$ brew -v
Homebrew 4.1.16
```

そのため、こちらの手順は飛ばしますが、
もし実施される方がいましたら下記のサイトは分かりやすかったので、
ご一読いただくといいと思います。

参考：[【mac】HomeBrewでパッケージ管理|macの初期設定を毎回手動でやっている方必見！
](https://shiimanblog.com/engineering/homebrew/)


# 1. macOS に PHP をインストール
macOS Monterey から PHP が標準バンドルされなくなりました。
参考：[macOS Monterey より前のバージョンにバンドルされている、PHP の使用法](https://www.php.net/manual/ja/install.macosx.bundled.php)
そのため、HomeBrew を用いて、次の手順で PHP をインストールします。
```
# インストールできるパッケージのバージョンを確認
$ brew search php

# 利用したい PHP をインストール（下記は　PHP8.2 の場合）
$ brew install php@8.2

# PATHを通す（下記は zsh の場合）
$ echo 'export PATH="/usr/local/opt/php@8.2/bin:$PATH"' >> ~/.zshrc
$ echo 'export PATH="/usr/local/opt/php@8.2/sbin:$PATH"' >> ~/.zshrc

# バージョン確認
$ php -v
```
php -v が動作しない場合、ターミナルを再起動するとうまくいくそうです。
バージョンが出力されたら、php が問題なくインストールされていますので、
次のステップに進みます。

# 2. macOS に Apache をインストール
この段階で、MacBook に標準搭載されている Apache にて、
一度 PHP を動かしたのですが、前述の丸見えレスポンスは改善しなかったので、
まだ何かおかしいと感じ、引き続き調べることになりました。

その結果、macOS標準 の Apache では Homebrew でインストールした PHP が
動かないことが分かり、今度は Homebrew で Apache（httpd） を
インストールすることとなりました。

ただインストールするだけでは、自動起動している macOS標準 の Apache と
ポートがバッティングして動作が阻害されるので、そちらの設定変更なども行います。
```
# インストールできる httpd のパッケージを確認
$ brew search httpd

# Apache がインストール可能な場合は 「httpd」 が返却される

# httpd をインストール
$ brew install httpd

# macOS標準 の Apache を停止
$ sudo launchctl stop /System/Library/LaunchDaemons/org.apache.httpd.plist

# パスワードを聞かれたら、Mac のログインパスワードを入力

# macOS標準 の Apache を launchd(自動起動の仕組み)の対象から除外
$ sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist

# Homebrew でインストールした Apache を起動
$ brew services start httpd
```

ブラウザで localhost:8080 にアクセスするか、ps コマンドで起動を確認します。

# 3. インストールした Apache の設定

インストールした Apache の設定ファイルは /usr/local/etc/httpd/httpd.conf です。
環境に合わせた設定や、PHP を読み込むための設定などをしていきます。

以降で設定箇所を記載しますが、行数は書いていません。
場所がわからない時は、viエディタ（ノーマルモード）で「/」を入力すると
文中の検索ができます。 
/ の後にキーワードを打ち込むと編集部分が特定できるので便利です。
- ポートの追加
インストール直後の Apache のポート設定は 8080 のみなので、80番ポートを追加します。
```
Listen 8080
# 既存の 8080 の設定の下に 80 の設定を追加
Listen 80
```
- ドキュメントルートの変更
必要に応じて、任意のドキュメントルートを設定します。
インストールした Apache のデフォルトの設定は /usr/local/var/www ですが、
macOS標準 の Apache の設定は /Library/WebServer/Documents なので、
そちらに設定するのもいいと思います。
```
# 既存の設定の下に任意のドキュメントルートを追記
# DocumentRoot "/usr/local/var/www" 
# <Directory "/usr/local/var/www">
DocumentRoot "/Library/WebServer/Documents"
<Directory "/Library/WebServer/Documents">
```
- PHPを読む込みのためのモジュール設定
インストールした PHP を Apache で利用できるようにするため、
LoadModuleディレクティブ で Apache に libphp.so を組み込みます。
libphp.so は Apache をインストールした時、すでに入っています。
LoadModule が多数 記載されている箇所があるので、その並びの最後に設定を追記します。

```
# PHP8.2 をインストールした場合
LoadModule php_module /usr/local/opt/php@8.2/lib/httpd/modules/libphp.so
<IfModule php_module>
  AddType application/x-httpd-php .php
</IfModule>
```

- PHPの設定ファイルの追記
PHPの設定ファイル（php.ini）のパスを httpd.conf 末尾に追記します。
```
# PHP8.2 をインストールした場合
<IfModule php_module>
PHPINIDir /usr/local/etc/php/8.2/
</IfModule> 
```

# 4. Apacheを再起動
設定ができたら、反映のため Apache を再起動します。
```
$ brew services restart httpd
```
ここまですると、PHP が動きますので、
お持ちのプログラムを動作させてみてください。

# サンプルコード
今回は下記 書籍に掲載されているプログラムを動かしました。
参考：[HTML演習 HTML5対応版: Webアプリケーション構築に必要なHTML、CSS、JavaScriptの基礎を学ぶ](https://www.amazon.co.jp/dp/4886479898?ref_=cm_sw_r_cp_ud_dp_TH487K2YF8A4QB2P14RK)
sample45.html を ドキュメントルートに配置し、
配下の cgi ディレクトリに sample.php を入れていただくと動作させることができます。
今回はコードの解説は致しません。
ご興味ある方は、ぜひ参考元の書籍をお読みいただいたり、調べてみてください。
```
# sample45.html（P.117 掲載）
<!DOCTYPE html>
<html lang="ja">
	<head>
		<meta charset="UTF-8">
			<title>HTML5演習</title>	
	</head>
	<body>
		<h1>会員登録</h1>
		<form action="cgi/sample.php" method="post">
			<p><lable>メールアドレス：<input type="email" name="email" size="20"></label></p>
			<p><lable>パスワード：<input type="password" name="pass" size="20"></label></p>
			<p><lable>お名前：<input type="text" name="uname" size="20"></label></p>
			<fieldset><legend>性別は</legend>
				<input type="radio" name="radio1" value="male" id="male" id="male"><label for="male">男性</label>
				<input type="radio" name="radio1" value="female" id="male" id="female"><label for="female">女性</label>
			</fieldset>
				<p><input type="checkbox" name="news" id="checkbox"><label for="checkbox">：お知らせの配信を希望する</label></p>
			<p><input type="submit" value="送信"></p>
		<form>
	</body>
</html>
```

```
# sample.php（P.119 掲載）
<!DOCTYPE html>
<html lang="ja">
	<head>
		<meta charset="UTF-8">
			<title>HTML5演習</title>	
	</head>
	<body>
		<?php
		    echo "<pre>";
		        print_r($_POST);
		    echo "<pre>";
		?>
	</body>
</html>
```
ちなみに余談ですが、私自身はこちらの本を新入社員研修でいただきました。
それも今から早8年前。
この本自体の初版が 2012年 なのでだいぶ古くはありますが、
今回コードを動かして非常に面白かったため、結局また本棚に戻すこととなりました。

# 参考文献
全体的にはこちらを参考にしています。

- [macOS MontereyでPHPとApache](https://qiita.com/ynack/items/ab150213f23f11a03cbc)
- [macOS Monterey以降でApacheとPHPを動かす](https://tangerine.hateblo.jp/entry/2021/10/26/161116)

その他、下記も参考にしています。
- [【Mac】PHPのインストール方法！Homebrewの使い方と環境変数の通し方！](https://appdev-room.com/php-homebrew)
- [Apache httpd を macOS に Homebrew でインストールする手順Apache httpd を macOS に Homebrew でインストールする手順](https://weblabo.oscasierra.net/apache-macos-install-homebrew/)
- [macOS に標準インストールされている Apache httpd の自動起動を解除する方法](https://weblabo.oscasierra.net/apache-macos-launchd-unload/)
- [【超初心者用】MacでApacheのドキュメントルートを確認する方法（Apacheの設定ファイルを探すというミッション）](https://qiita.com/mako0104/items/d7b476990fa261fb5d28)

参考文献の引用方法はこちらを参考にしています。
- [Qiitaで記事を公開するときに気を付けるべきマナーについて 〜無断でネットや書籍の内容を丸写しするのはやめよう〜](https://qiita.com/jnchito/items/215c2d51599eb29adabc)

# 最後に
初Qiita となりました。
文章の引用方法、その他 不適切な部分がありましたらぜひご指摘お願いいたします。