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モジュールを作成する方法もあるようです。