Apache PHPモジュールについて

WEBサーバでPHPを動作させる場合、ApacheをインストールしPHPをインストールするだけでは動きません。

PHPをwebサーバで動かすには大きく、3つの方法があります。

・ApacheのPHPモジュールを使用する。
・CGIとしてPHPを動かす。
・php-fpmを使用する。

今回は ApacheのPHPモジュールを使用し、PHPを動作させることについて説明します。

説明

ApacheのPHPモジュール

Apacheは必要な機能をモジュールと言う単位で読み込んで使用しています。そのモジュールの中でPHPを実行する為のモジュールが存在します。
Apacheは、このモジュールを使用してPHPを動かす事が可能です。

Apacheが読み込むモジュールについては以下を参考にして下さい。

PHPの実行プロセス

PHPモジュールを使用する場合に、意識することについて説明します。
ApacheのPHPモジュールでPHPを動作させる場合、PHPの動作はApacheのプロセスで実行される事を意識して下さい。簡単に言うとPHP自身がPHPを動かすのではなく、ApacheがPHPを動かすと言う事です。これはApacheのモジュールを使用してPHPを動作させる為、ApacheがPHPを動かしていることになります。
Apacheのプロセスで動作すると言うことは、WEBサイトやWEBサービスにアクセスが多ければ多いほどWEBサーバ(Apache)に負荷がかかります。

Apache PHP の実行

それでは、実際にApacheにPHPモジュールをインストールしてPHPを動かしてみます。なお、PHPをインストールしていない場合、以下を参考にしてPHPをインストールして下さい。

PHPモジュールのインストール

モジュールが存在しない事の確認

PHPモジュールが存在しない事を確認します。
“php_module” がなければ、PHPモジュールがないと言うことになります。

・コマンド

grep -r php /etc/httpd/conf.modules.d

モジュールのインストール

PHPモジュールをインストールします。

・コマンド

yum -y install mod_php

インストールの確認

以下のコマンドを実行しPHPモジュールがインストールされた事を確認します。

・コマンド

grep -r php /etc/httpd/conf.modules.d

・結果

/etc/httpd/conf.modules.d/15-php.conf:# Cannot load multiple php modules
/etc/httpd/conf.modules.d/15-php.conf:<IfModule !mod_php5.c>
/etc/httpd/conf.modules.d/15-php.conf:    <IfModule !mod_php7.c>
/etc/httpd/conf.modules.d/15-php.conf:            LoadModule php_module modules/libphp.so
/etc/httpd/conf.modules.d/15-php.conf:<IfModule !mod_php5.c>
/etc/httpd/conf.modules.d/15-php.conf:  <IfModule !mod_php7.c>
/etc/httpd/conf.modules.d/15-php.conf:      # PHP under apache, use the php-fpm package instead.
/etc/httpd/conf.modules.d/15-php.conf:      LoadModule php_module modules/libphp-zts.so

15-php.conf と言うファイルが作成されていて、どうやらそこにPHPモジュールの読み込みが記載されているようです。

■ 補足
おそらく、インストールされているバージョンに紐づくPHPモジュールがインストールされます。なので、使用したいバージョンのPHPをインストールした後に実行して下さい。

モジュールの確認

PHPモジュールを読み込んでいる設定ファイルの内容を確認してみましょう。

・コマンド

cat /etc/httpd/conf.modules.d/15-php.conf

・内容

#
# PHP is an HTML-embedded scripting language which attempts to make it
# easy for developers to write dynamically generated webpages.
#

# Cannot load multiple php modules
<IfModule !mod_php5.c>
    <IfModule !mod_php7.c>
        <IfModule prefork.c>
            LoadModule php_module modules/libphp.so
        </IfModule>
    </IfModule>
</IfModule>

<IfModule !mod_php5.c>
  <IfModule !mod_php7.c>
    <IfModule !prefork.c>
      # The ZTS module is not the supported method of executing
      # PHP under apache, use the php-fpm package instead.
      #
      # https://wiki.apache.org/httpd/PHP-FPM
      LoadModule php_module modules/libphp-zts.so
    </IfModule>
  </IfModule>
</IfModule>

modules/libphp.so がPHPモジュールのようで、LoadModuleディレクティブによりモジュールが読み込まれている事が分かります。libphp-zts.so はPHP FPM 用のモジュールのようです。PHP FPMについては説明を割愛します。

以下のコマンドで実際にモジュールを確認してみました。

・コマンド

ls -al /etc/httpd/modules/

・結果(一部抜粋)

-rwxr-xr-x 1 root root 5172520 Jul 7 17:41 libphp-zts.so
-rwxr-xr-x 1 root root 5172536 Jul 7 17:41 libphp.so

Apacheの設定読み込み

設定ファイルを変更しただけではApacheは設定を読み込んでくれません。Apacheを再起動すると変更した設定を読み込んでくれます。
ゆえに、Apacheを再起動します。

systemctl restart httpd

動作確認

動作確認用ファイルの作成

ドキュメントルート “/var/www/html” へ index.php と言うファイルを配置します。

・コマンド

vi /var/www/html/index.php

・内容

<?php
phpinfo();

確認

ブラウザへ http://localhost を入力して下さい。 phpの情報が表示されれば成功です。

最後に

今回はPHPモジュールをyumコマンドでインストールしましたが、コンパイルしてPHPモジュールを作成する方法もあるようです。

© DeNnie.Lab All Rights Reserved.