Apache HTTP Serverのモジュール版PHPの動作設定

Apache HTTP ServerPHPをインストールできたので,PHPのマニュアルを参考にApacheで動作させる設定を行う。

何も設定しない場合,index.phpを開いてもソースコードがそのまま表示されるだけで,PHPが動作しない。

Apache HTTP Server 2系 (Apache) でPHPを動作させるためには以下の3の設定を行う必要がある

  1. LoadModuleによるPHPモジュールの読み込み
  2. SetHandlerによる.php拡張子の処理の指示
  3. DirectoryIndexによるindex.phpへのリダイレクト

それぞれの項目について解説していく。

なお,Apacheは$APACHE_HOME (~/.local/apache2) にインストールされており,httpd.confは$APACHE_HOME/conf/httpd.confにインストールされていると想定する。

LoadModuleによるPHPモジュールの読み込み

まず,以下のコマンドでApacheのPHPモジュールが有効になっていることを確認する。

apachectl -M | grep php
php7_module (shared)

上記またはphp5_module (shared)が表示されていない場合,ApacheのPHPモジュールが読み込まれていない。

httpd.confに以下を記述し,PHP 7のモジュールを読み込む。

LoadModule php7_module modules/libphp7.so

PHP 5のモジュールを読み込む場合は以下を記述する。

LoadModule php5_module modules/libphp5.so

最後にapachectl -Mでphpがあることを確認しておく。

SetHandlerによる.php拡張子の処理の指示

続いて,ApacheにPHPファイルの処理方法を指示する。

httpd.confに以下を記述する。

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

これにより,.phpファイルをPHPとみなして処理する。

なお,application/x-httpd-phpのMIMEはPHPのソースコードのsapi/apache2handler/sapi_apache2.cで定義されて使われている。

DirectoryIndexによるindex.phpへのリダイレクト

最後に,ディレクトリーにアクセスした際に,index.phpが存在すればそちらにリダイレクトするように設定する。PHPを動作させるだけであればこの設定は不要だ。しかし,ディレクトリーへのアクセス時にindex.phpが表示されないため,設定しておいたほうがよいだろう。

httpd.confに以下のようにDirectoryIndex index.phpをindex.htmlの前に指定する。

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

これにより,ディレクトリーへのアクセス時に,index.php, index.htmlの順番に内容の表示を試みる。

PHPファイルの表示

ここまででApacheのモジュール版PHPの設定ができた。最後に動作することを確認する。

DocumentRoot (~/.local/var/www/html/) にindex.phpとindex.htmlを用意する。

cat <<-"EOT" >~/.local/var/www/html/index.php
<?php
echo "PHP works";
EOT

cat <<-"EOT" >~/.local/var/www/html/index.html <!DOCTYPE html> <html> <head><title>index.html</title></head> <body> <h1>It works!</h1> </body> </html> EOT

用意できたら以下のコマンドでApacheを起動する。

apachectrl

最後に,Webブラウザーでlocalhost:8080にアクセスする。

PHP worksと表示されていれば,PHPが動作している。It works!と表示されている場合,設定が間違っているかキャッシュで前回の表示内容が表示されている可能性がある。設定を見直して問題なければ,C-rでページをリロードしてみよう。

これでApacheでモジュール版PHPが動作するようになった。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です