suPHP環境におけるPHP設定の変更方法

suPHP環境のサーバーでPHPの設定を任意の内容に変更する場合、「php.ini」ファイルを使用します。

例えば、ドキュメントルートの public_html 内に以下の4項目のPHP設定を記した「php.ini」を設置した場合、
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.encoding_translation = On
upload_max_filesize = 5M

動作検証(phpinfoを参照)すると、それぞれの設定が問題なく変更されていることが確認できます。

ただ、suPHP環境の場合、この「php.ini」による効果は下位ディレクトリには反映されませんので、もしもサイト全体にPHPの設定を反映させる必要がある場合は、全てのディレクトリにphp.iniファイルを1つずつ設置する必要があります。

小規模なサイトであれば、この方法で特に問題ないですが、ディレクトリが多数ある大規模なサイトの場合、php.iniファイルを各ディレクトリに設置するのは非常に面倒なうえ、仮にPHPの設定を追加したり再変更することになれば大変な作業となります。

そのようなケースでは、.htaccessと併用することで各ディレクトリ全体にPHPの設定を反映させることができます。

ここでは例として、複数の下位ディレクトリが存在するドキュメントルートの public_html 内に、上記4項目のPHP設定を設置し、その下位ディレクトリの中の一つである「mobile」ディレクトリにのみ、異なるPHP設定を反映させたい場合の方法をご紹介します。

まず、上記と同様に4項目のPHP設定を記した「php.ini」を public_html 内に設置します。

次にその「php.ini」を設置した public_html 内に以下の.htaccessを置きます。
suPHP_ConfigPath /home/ユーザー名/public_html/
<Files ~ "¥.ini">
deny from all
</Files>

1行目のパスはご利用環境に合わせて適宜変更してください。 1行目のパスはphp.iniファイルが存在するディレクトリ(末尾はスラッシュ)を指定してください。 2~4行目の記述はphp.iniファイルに対するアクセスを拒否するためのものです。 .htaccessは文字コードをBOM無しの「UTF-8N」、改行コードを「LF」で作成してください。 .htaccessの最後には必ず改行を入れてください。

この時点でpublic_html 以下の全てのディレクトリ(サイト全体)に上記4項目のPHP設定が反映されています。

これに加え、public_html 以下の「mobile」ディレクトリ(&下位ディレクトリ)に対しては、下記の異なった2項目のPHP設定を反映させるため「php.ini」ファイルを作成し、それを「mobile」ディレクトリ内に設置します。
mbstring.encoding_translation = Off
upload_max_filesize = 2M
「mobile」ディレクトリの下位ディレクトリにも反映させるために以下の.htaccessを「mobile」ディレクトリ内に設置して完了です。
suPHP_ConfigPath /home/ユーザー名/public_html/mobile/
「mobile」ディレクトリ内に下位ディレクトリが存在しない場合は.htaccessは不要です。 「mobile」ディレクトリ内の下位ディレクトリには異なる設定を反映させる必要がない場合も.htaccessは不要です。 .htaccessは設置したディレクトリ以下の全てに影響しますので、特定のディレクトリだけで設定を反映させる場合は、.htaccessは使用せず「php.ini」ファイルを該当ディレクトリに設置してください。