【Apache設定】.html拡張子のファイル内でPHPを実行する際にはまったこと

どうもこんにちは。三宮です。
 
.html拡張子のファイル内でPHPを実行する際、少しはまってしまったので備忘のため情報を残しておこうと思います。

今回の環境

今回の環境は下記になります。

Apache 2.4
PHP 8系

試した内容

1.Apacheのconfファイルに、AddType、AddHandlerを追加

# Apacheの設定ファイルを変更
vi /etc/httpd/conf.d/XXXX.conf

# ディレクトリタグ内にMIMEタイプを追加
<Directory /var/www/test>
   AddHandler php-script .php .html
   AddType application/x-httpd-php .php .html
</Directory>

# Apacheを再起動
systemctl restart httpd

.htmlを確認したところphpは実行できず。

2.htaccessを利用してMIMEタイプを追加

# 対象ディレクトリへ移動
cd /var/www/test

# htaccessファイルを作成
vi .htaccess

# 設定内容
<FilesMatch “\.html$”>
   AddType application/x-httpd-php .html 
</FilesMatch>

.htmlを確認したところphpは実行できず。

原因

設定をよく確認したところ、ApacheのMPM(Multi Processing Module)がevent実行されていたため、php_moduleが読み込まれていなかったことが原因でした。

解決/確認手順

1.php_moduleが読み込まれているかを確認

apachectl -M | grep php_module

何も表示されないため、php_moduleが読み込まれていない。

2.php_moduleの設定を確認

今回はphp8環境のため、下記のモジュールを確認したところ、preforkモードの際にphp_moduleが読み込まれていることが判明。

# php_moduleを読み込んでいる内容を表示
cat /etc/httpd/conf.modules.d/20-php81-php.conf

~~~省略~~~~
<IfModule !mod_php5.c>
  <IfModule !mod_php7.c>
   <IfModule prefork.c>
    LoadModule php_module modules/libphp81.so
   </IfModule>
  </IfModule>
</IfModule>
~~~省略~~~~

3.MPM実行モードを変更

event実行をprefork実行に変更。

# MPMモードの内容変更
vi /etc/httpd/conf.modules.d/00-mpm.conf

変更前
~~~省略~~~~
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
#LoadModule mpm_worker_module modules/mod_mpm_worker.so
LoadModule mpm_event_module modules/mod_mpm_event.so
~~~省略~~~~

変更後
~~~省略~~~~
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
#LoadModule mpm_worker_module modules/mod_mpm_worker.so
#LoadModule mpm_event_module modules/mod_mpm_event.so
~~~省略~~~~

4.Apacheを再起動し、php_moduleが読み込まれているか確認

# 再起動
systemctl restart httpd

# php_module読み込みを確認
apachectl -M | grep php_module
php_module (shared)

5.最後に、MIMEタイプを設定

試した内容のどちらかを設定すれば.html拡張子内でPHPが実行できました。
 
1.Apacheのconfファイルに、AddType、AddHandlerを追加
2.htaccessを利用してMIMEタイプを追加

最後に

ApacheのMPMについてはまた別の機会にでも。
 
それではまた。
 
 
 
 
《関連記事》

PostgreSQL×Dockerで環境構築
技術
2023.2.21(Tue)

手順をすべて紹介。Windows環境にPostgreSQL×Dockerで環境構築する方法

#PHP#SQL

exited with code 1
技術
2022.12.9(Fri)

Dockerコンテナ作成時に exited with code 1 が発生

#技術

Laravel×Dockerで環境構築
技術
2022.1.21(Fri)

手順をすべて紹介。Windows環境にLaravel×Dockerで環境構築する方法

#PHP

記事をシェア
MOST VIEWED ARTICLES