20
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

NISE (南山大学 青山研究室)Advent Calendar 2019

Day 2

macOS CatalinaのApacheでlocalhostにアクセスしたかった

Last updated at Posted at 2019-12-01

タイトルの通りです。
macOS CatalinaのApacheくんとlocalhostを巡って激しく殴り合ったので、メモとして残しておきます。

何があった

http://localhost:8080は起動するのに色々いじくり回してもhttp://localhost/はrefusedされ、http://localhost:8080/~{ユーザ名}は404になる。キレそう。ていうかキレてる。

#目標

  • Apacheを起動させてlocalhostにアクセスできるようにする
  • 作業ディレクトリをホームディレクトリ直下に変える
  • phpを複数バージョン使えるようにしたい

実行環境

  • mac:MacBook Pro 16 inch(2019)
  • OS:10.15 Catalina
  • Shell:zsh
  • テキストエディタ:atom

やったこと

実際はここを参考にしたので書いてあることはほぼ一緒です。英語に拒絶反応のない人はこっち見たほうがいい。

まずは動かす

結論から言うとmacにもともと入っていたApacheはなんか色々面倒らしいので、HomeBrewでApacheを持ってきた方が良いらしい。

以下原文ママ

The latest macOS 10.15 Catalina comes with Apache 2.4 pre-installed, however, it is no longer a simple task to use this version with Homebrew because Apple has removed some required scripts in this release. However, the solution is to install Apache 2.4 via Homebrew and then configure it to run on the standard ports (80/443).

日本語で言うと、
CatalinaにはApache2.4入ってるよ。でもHomebrewで使おうとするとAppleが必要なスクリプトを消しちゃったのでめんどくさいよ。Homebrew経由でインストールして、標準ポートで動作するように設定すれば解決するよ。
ってことらしいです。

とりあえずMacにもともと入っていたApacheを実行している場合は止めて自動で実行しないようにする。

$ sudo apachectl stop
$ sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist 2>/dev/null

もともと入っていたApacheくんに別れを告げたので、新しいApacheくんを持ってくる。

$ brew install httpd

新しいApacheくんを自動起動するように設定。

$ sudo brew services start httpd

ここで一旦localhostにアクセスしましょう。**It works!**みたいな表示が出るはずです。

Apacheの構成を変更する

デフォルトでは8080番ポートをListenしてるので80番ポートにする。
Apacheの設定ファイルは/usr/local/etc/httpd/httpd.confにあるのでこれをテキストエディタで開く。

$ atom /usr/local/etc/httpd/httpd.conf

52行目にListen 8080と書いてあるのでListen 80に変更。

次はDocumentRootを変更する。
249、250行目にこんな感じで書いてあるところがある。

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

これを以下のようにする。(わかってると思うけど{ユーザ名}には自分のmacのユーザ名を入れる。)

DocumentRoot /Users/{ユーザ名}/Sites
<Directory /Users/{ユーザ名}/Sites>

そのちょっと下の270行目にあるAllowOverride Noneと書いてある箇所をAllowOverride Allに変更。
次に、182行目の#LoadModule rewrite_module lib/httpd/modules/mod_rewrite.soのコメントアウトを解除(行頭の#を削除)。

これでホームディレクトリの指定が終わった。でもこのままではアクセス権の問題があるので193、194行目にこんな感じで書いてある箇所がある。

User _www
Group _www

これを以下のようにする。

User {ユーザ名}
Group staff

あと、224行目に#ServerName www.example.com:8080と書いてあるはずだが、その下の行にServerName localhostと書いてなかったら改行してから書いておく。

動作確認

ホームディレクトリ直下に作業用ディレクトリを作ってテストファイルを作る。

$ mkdir ~/Sites
$ echo "<h1>Test</h1>" > ~/Sites/index.html

一旦Apacheを再起動。

$ sudo apachectl -k restart

localhostにアクセス。

スクリーンショット 2019-11-26 20.20.50.png

こんな感じになれば成功。今まではここまで行けなかったので非常に気分がいい。

phpをインストールする

(2019/12/04追記)php7.4が出たのでphp7.1が消えた。多分インストール出来るんだろうけどやってないのでここでは説明を省きます。以下の文を7.1→7.2、7.2→7.3、7.3→7.4に読み替えて下さい。

(正直ここらへんは参考にしたサイトの内容をそのままやったらできなかったので自分流)
まずHomebrewでphp7.1とphp7.2とphp7.3をインストール。

$ brew install php@7.1
$ brew install php@7.2
$ brew install php@7.3

php7.3とのリンクをちょん切ってとphp7.1とリンクする。

$ brew unlink php@7.3 && brew link --force php@7.1

一応ここで端末を再起動。
phpのバージョンを確認する。

$ php -v
PHP 7.1.33 (cli) (built: Oct 25 2019 10:52:19) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.1.33, Copyright (c) 1999-2018, by Zend Technologies

Apacheでphpを使えるようにする

恐らく182行目らへんにLoadModule rewrite_module lib/httpd/modules/mod_rewrite.soと書かれているはず。
その下の行にこれを追加。

LoadModule php7_module /usr/local/opt/php@7.1/lib/httpd/modules/libphp7.so
#LoadModule php7_module /usr/local/opt/php@7.2/lib/httpd/modules/libphp7.so
#LoadModule php7_module /usr/local/opt/php@7.3/lib/httpd/modules/libphp7.so

次に、282-284行目にこんな感じのブロックがある。

<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>

これを下の文に置き換える。

<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>

<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>

保存して、Apacheを停止させてから再起動。

$ sudo apachectl -k stop
$ sudo apachectl start

phpがインストールできたか確認する。
以下のコマンドを入力。

$ echo "<?php phpinfo();" > ~/Sites/info.php

info.phpを開く。
スクリーンショット 2019-11-26 21.48.05.png

こんな感じの画面が出れば成功。

phpのバージョンを切り替える

以下のコマンドを入力。

$ curl -L https://gist.githubusercontent.com/rhukster/f4c04f1bf59e0b74e335ee5d186a98e2/raw > /usr/local/bin/sphp
$ chmod +x /usr/local/bin/sphp

続いて、以下のコマンドを入力。

$ echo $PATH

なんか出てきたと思います。その中に/usr/local/bin/usr/local/sbinがあるか探してください。
なかったらexport PATH=/usr/local/bin:/usr/local/sbin:$PATH~/.zshrcに追加しといてください。

sphpができるか確認しましょう。以下のコマンドを入力しましょう。

$ sphp 7.2

なんか色々出てくるはず。途中でパスワードも多分要求される。最終的にAll done!と表示されたらOK。
info.phpを開く。

スクリーンショット 2019-11-26 22.11.39.png phpのバージョンが変わっていることがわかる。

以下のようにすれば任意のバージョンに変更可能。

$ sphp 変更したいphpのバージョン

(2019/12/04 追記)
いつからなのかは知らないけど、brew upgradeをすると7.1が消えて、php 7.3が7.4になる。この状態でsphp 7.4をやってもこんな感じになる。

$ sphp 7.4
Unknown version of PHP. PHP Switcher can only handle arguments of: 5.6,7.0,7.1,7.2,7.3

7.3を使いたい場合はbrew install php@7.3でphp 7.3を再インストール。

httpd.conf#LoadModule php7_module /usr/local/opt/php@7.3/lib/httpd/modules/libphp7.soの下の行に
#LoadModule php7_module /usr/local/opt/php@7.4/lib/httpd/modules/libphp7.soを追加。

/usr/local/bin/sphpを一旦削除する。違うとこ消すと面倒なので慎重に。

その後以下のコマンドを入力。

$ curl -L https://gist.githubusercontent.com/rhukster/f4c04f1bf59e0b74e335ee5d186a98e2/raw > /usr/local/bin/sphp
$ chmod +x /usr/local/bin/sphp

これでsphp 7.4が使えるようになったはず。
(追記終わり)

とりあえずこれで一連の操作はすべて完了。

覚えておきたいこと

Apacheの起動、停止、再起動は以下のコマンドで。

$ sudo apachectl start
$ sudo apachectl -k stop
$ sudo apachectl -k restart

Chromeでlocalhostを見ていると、リロードしても表示が変わらないときが多々ある。
そういうときはスーパーリロードをかけると良いかもしれない。
ChromeのスーパーリロードはCmd + Shift + Rで出来る。

あとがき

数時間で書いたので文章適当かもしれない。
割と面倒臭かった。正直Apacheとphp嫌いになった。

2020年11月22日追記

macOS Big Sur出たらどうなるんだろうね。
Big Sur出ましたね。
Big Surにした人、ちゃんと動いたか教えてくれると喜びます()

参考

macOS 10.15 Catalina Apache Setup: Multiple PHP Versions | Official home of Grav CMS

20
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?