もくじ
- もくじ
- 概要
- Set the 'ServerName' directive globally to suppress this message
- PHPの問題
- 設定したら
- index.php がいい感じに表示されるやつ
- 参考
概要
もともとソースからビルドしたApacheと、brewで入れたPHP5.6がMacに入っていて、簡単な動作確認などに利用していました。 ある日、brewのアップデートをしたからなのか、何かのライブラリを入れた関係で勝手に依存パッケージが入れられたのか分かりませんが、Apache 2.4が新しくインストールされていて、PHPのバージョンも7になっていました。
$ httpd -v
Server version: Apache/2.4.33 (Unix)
Server built: Apr 10 2018 15:28:33
$ php -v
PHP 7.2.4 (cli) (built: Apr 10 2018 16:11:28) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.2.4, Copyright (c) 1999-2018, by Zend Technologies
なんか色々動かなくなっていたので直そうと試みます。
Set the 'ServerName' directive globally to suppress this message
http://localhost にアクセスしましたが何も表示されませんでした。とりあえず、apachectl restartしてみると以下のエラーが表示されました。
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using ysakamoto.local. Set the 'ServerName' directive globally to suppress this message
configの場所を特定する
もともとソースからビルドしたapacheが入っており、configは /etc/apache2/conf/httpd.conf を参照していました。そこで、このファイルに ServerName localhost:80 の設定を追加しましたが、apachectl restartした結果同じエラーが出ました。
もしかしてこのconfigが読まれていない?ということでconfigの場所を見てみます。 httpd -V または apachectl -V で見られます。
$ httpd -V
Server version: Apache/2.4.33 (Unix)
Server built: Apr 10 2018 15:28:33
Server's Module Magic Number: 20120211:76
Server loaded: APR 1.6.3, APR-UTIL 1.6.1
Compiled using: APR 1.6.3, APR-UTIL 1.6.1
Architecture: 64-bit
Server MPM: prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=256
-D HTTPD_ROOT="/usr/local/Cellar/httpd/2.4.33"
-D SUEXEC_BIN="/usr/local/opt/httpd/bin/suexec"
-D DEFAULT_PIDLOG="/usr/local/var/run/httpd/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="/usr/local/etc/httpd/mime.types"
-D SERVER_CONFIG_FILE="/usr/local/etc/httpd/httpd.conf"
みると /usr/local/etc/httpd/httpd.conf が参照されているようだったので、こちらを編集する必要がありそうです。
ServerName を書く
ServerName がコメントアウトされている行があったので、コメントアウトを外して以下のように書き換えました。
ServerName localhost:8080
以前の /etc/apache2/conf/httpd.conf の設定ではポートは80になっていましたが、/usr/local/etc/httpd/httpd.conf ではポート8080で動くようになっていました。とりあえず8080のまま動かしておくことにしました。古いconfを新しい方のconfにコピーしても動くかもしれないですが、とりあえずそのようなドラスティックなことはせず、地道に書き換えられるならその方針で行こうと思いました。
これを記載したうえで apachectl restart して localhost:8080 にアクセスしたら無事 It works! のページが表示されました。
PHPの問題
さて、PHPのバージョンが5.6から7に上がってしまったことに加え、先程のhttpd.confからもPHPの設定が消えてしまったので、このあたりをどうにかしなければなりません。
とりあえずPHPのバージョンが5.6から7になっても大きく困ることはないので、このままApacheにPHP7の設定をしてしまうことにしました。
brewでインストールされているPHPのディレクトリ
brewでインストールされたライブラリなどはだいたい /usr/local/Cellar以下にあります。phpであれば /usr/local/Cellar/php あたりです。これに関しては、 which コマンドあたりを活用してもわかります。
$ which php /usr/local/bin/php $ ls -la /usr/local/bin/php lrwxr-xr-x 1 xxxxx admin 27 4 10 16:12 /usr/local/bin/php@ -> ../Cellar/php/7.2.4/bin/php
今回brewでインストールされたのは PHP 7.2.4 だったため、 /usr/local/Cellar/php/7.2.4/ がPHPのディレクトリとなります。
Apache用のPHPモジュールのディレクトリ
だいたいは PHPのディレクトリ/lib/httpd/ とか PHPのディレクトリ/libexec/apache2 とかそのあたりにあります。
PHP7.2.4の場合、/usr/local/Cellar/php/7.2.4/lib/httpd/modules/libphp7.so にありました。
ApacheのconfigにPHPのLoadModulesを追加
httpd.confに以下を追加しました。
LoadModule php7_module /usr/local/Cellar/php/7.2.4/lib/httpd/modules/libphp7.so AddHandler application/x-httpd-php .php
/usr/local/Cellar/php/7.2.4/lib/httpd/modules/libphp7.so この部分のバージョンなんかにあわせてください。
PHP5.6の時は LoadModule php5_module local/Cellar/php56/5.6.11_2/libexec/apache2/libphp5.so みたいな感じでした。
Handlerも追加する必要があるようです。PHP5.6の時はAddHandler無くても動いていましたが、PHP7から必要になったんでしょうか。
設定したら
設定を見たらわかると思いますが、ドキュメントディレクトリも /usr/local/var/www とかになってます(もともとは /Library/WebServers/Document とかそんなんだった)
これは httpd -S とかすればわかります。
$ httpd -S VirtualHost configuration: ServerRoot: "/usr/local/opt/httpd" Main DocumentRoot: "/usr/local/var/www" Main ErrorLog: "/usr/local/var/log/httpd/error_log" Mutex default: dir="/usr/local/var/run/httpd/" mechanism=default Mutex mpm-accept: using_defaults PidFile: "/usr/local/var/run/httpd/httpd.pid" Define: DUMP_VHOSTS Define: DUMP_RUN_CFG User: name="_www" id=70 not_used Group: name="_www" id=70 not_used
ということで、 /usr/local/var/www とかに適当なPHPを置いて、 http://localhost:8080/hoge.php とかでアクセスしてPHPが動くことを確認します。
index.php がいい感じに表示されるやつ
http://localhost/ で index.html が表示されるように、index.php も表示されるようにしたいです。
httpd.conf で
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
という行があるので
<IfModule dir_module>
DirectoryIndex index.html index.php
</IfModule>
というように修正します。これでindex.phpが/で見られるようになります。