もくじ
- もくじ
- 概要
- 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が/で見られるようになります。