【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についてはまた別の機会にでも。
それではまた。
《関連記事》