.php以外の拡張子でPHPを動作させようとして発生したエラー「Got error 'Access to the script '/var/www/html/php.html' has been denied (see security.limit_extensions)'」の原因と対処方法

目次

スポンサードリンク

この記事では、.php以外の拡張子のファイルをPHPとして動作させようとした際によく遭遇するエラーの原因と対処方法を解説します。

Apacheの設定でPHPを使用できるようにし、ページにアクセスしてみると下記エラーがでることがあります。

Got error 'Access to the script '/var/www/html/php.html' has been denied (see security.limit_extensions)

このエラーは、Webサーバーの設定で特定の拡張子(この場合は.html)でのPHP実行が制限されているために発生します。セキュリティ強化の一環として、意図しないPHPコードの実行を防ぐための一般的な対策によるものです。

エラーの原因

php.ini や php-fpm の設定ファイルで、実行可能な拡張子が.phpに限定されている場合があります。私の環境では 下記設定(security.limit_extensions)がコメントアウトされており、デフォルトの設定が適用されていました。デフォルトの設定では、拡張子 .php のみがPHPスクリプトとして実行されるようになっています。

# cat /etc/php-fpm.d/www.conf | grep limit_extensions
;security.limit_extensions = .php .php3 .php4 .php5 .php7

PHPの設定変更

今回は拡張子が .html のファイルも PHPスクリプトとして動作させたかったので、上記設定のコメントアウトを外し、.html を末尾に追加しました。拡張子を.php に限定しておいた方がセキュリティ上は望ましいと考えられているので、下記設定を使用する場合はリスクを理解した上で設定するとよいでしょう。

# 変更後の設定内容
# cat /etc/php-fpm.d/www.conf | grep limit_extensions
security.limit_extensions = .php .php3 .php4 .php5 .php7 .html

設定変更を反映するため php-fpm を再起動しておきます。

systemctl restart php-fpm

Apacheの設定変更

Apache側の設定では、PHPスクリプトへのリクエストを php-fpm プロセスにプロキシ(中継)する設定がかかれています。 私の環境では「/etc/httpd/conf.d/php.conf」に記述がありました。ここでも、PHPスクリプトと判別する拡張子が書かれています。初期状態では、.php、.phar のみ登録されているので、.html もここに追加しておきます。

元々の設定内容

#
# Redirect to local php-fpm (no mod_php in default configuration)
#
<IfModule !mod_php.c>
    # Enable http authorization headers
    SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1

    <FilesMatch \.(php|phar)$>
        SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
    </FilesMatch>
</IfModule>

変更前

<FilesMatch \.(php|phar)$>

変更後

<FilesMatch \.(php|html|phar)$>

設定後の確認

/var/www/html に 拡張子が html のファイルを作って、PHPが動作するか確認してみます。php.html という名前のファイルを作り、下記内容を保存しました。

<?php

// すべての情報を表示します。デフォルトは INFO_ALL です。
phpinfo();

?>

問題なくPHPが動作している場合は、PHP のバージョンや設定を確認できるはずです。

PHPが正常に動作したときのスクリーンショット


レベルアップPHP ~言語を理解して中級者へ~
PHPの入門書を読み終えさらなる実力をつけたいエンジニア向けの技術書です。PHPの入門書にはあまり載っていないバージョンアップ方法やパフォーマンスなど、実務に役立つ内容も記載が豊富。30日間の無料体験もできる『Kindle Unlimited』でも読めます。

独習PHP 第4版
PHP の基本から抑えたいときはこちら。解説が詳しい、練習問題で知識の定着も促せる。辞書のような一冊。手元にある安心感。とにかく分厚い。