PHP実行モードによる設定値の変更方法の違い
PHPを実行する方法はいくつかあり、それぞれによって設定値を変更するための方法が異なります。この記事では、それぞれの方法とその違いについて説明します。
はじめに
PHPの設定値を変更するために.htaccess
ファイルを使用しようとしたところ、500エラーが発生しました。原因を調査したところ、PHPの実行モードが関係していることが分かりました。具体的には、.htaccess
ファイルを利用して設定値を変更できるかどうかは、PHPがどのように実行されているかによります。この記事では、それぞれの実行モードとその違いについて説明します。
PHPの設定ファイルについて
PHPの動作に関する設定は、主にphp.ini
ファイルと.htaccess
ファイルで行います。php.ini
はWebサーバー全体の設定を管理する一方、.htaccess
は個々のディレクトリに対する設定を管理します。つまり、php.ini
はサーバー管理者が、.htaccess
はアプリケーション開発者がそれぞれ管理することが一般的です。
以下に、post_max_size
設定を変更する場合の例を示します。php.ini
で変更する場合、以下のように記述します。
post_max_size = 40M
.htaccessで変更する場合、以下のように記述します。
php_value post_max_size 40M
しかし、この設定変更が反映されるか否かは、PHPがどの実行モードで動作しているかによります。Apacheモジュール(mod_php)としてPHPを実行している場合、.htaccessファイルでPHPの設定値を変更することが可能です。一方、FastCGIやPHP-FPMといった実行モードでは、.htaccessファイルでPHPの設定を変更することはできません。つまり、PHPがFastCGIモードで動作している状況で、.htaccessファイルでpost_max_sizeを変更しようとした場合、その設定は反映されないということです。
この事実を踏まえて、PHPの実行モードによる設定方法の違いを以下に記載します。
PHPの実行モードと設定変更の影響
PHPを実行する方法は主に3つあります。
- Apacheモジュール(mod_php)
- CGI(Common Gateway Interface)
- FastCGI
これらの実行モードによって、PHPの設定値をどのように変更するかが異なります。
Apacheモジュール(mod_php)
ApacheモジュールとしてPHPを実行する場合、PHPはApacheサーバーの一部として動作します。そのため、.htaccess
ファイルを利用して設定値を変更することが可能です。しかし、全ての設定値が.htaccess
から変更可能なわけではなく、設定可能な値はphp.ini
ファイルの設定によります。
CGI
CGIとしてPHPを実行する場合、.htaccess
ファイルでの設定変更は利用できません。代わりに、php.ini
ファイルや、PHPスクリプト内部でini_set()
関数を使用することで設定値を変更することが可能です。
FastCGI
FastCGIとしてPHPを実行する場合、.htaccess
ファイルでの設定変更は一部の値に対してのみ可能です。具体的には、php_flag
やphp_value
ディレクティブを使用することができます。しかし、その他の設定値についてはphp.ini
ファイルやini_set()
関数を使用する必要があります。
近年の主流:FastCGI
近年では、PHPを実行する方法としてFastCGIやPHP-FPM(FastCGI Process Manager)が多くの環境で主流となっています。主な理由は以下のとおりです:
- パフォーマンスと効率: FastCGIはプロセスをプールし、それらを再利用することができます。これにより、新しいプロセスを作成するためのオーバーヘッドが削減され、パフォーマンスが向上します。
- セキュリティ: FastCGIを使用すると、PHPプロセスをウェブサーバー(Apacheなど)から分離できます。これにより、PHPスクリプトの問題がウェブサーバー全体に影響を及ぼすリスクが低減されます。
- 柔軟性: FastCGIは、様々なウェブサーバー(Apache、Nginx、IISなど)で使用することができます。これにより、ウェブサーバーの選択肢が広がります。
一方、Apacheモジュール(mod_php)もPHPを実行する方法として存在します。この方法は設定が比較的簡単で、Apacheの.htaccessファイルからPHP設定を変更できるなどの利点があります。しかし、これらの利点は、パフォーマンスやセキュリティの問題に比べて、一部の状況や用途に限定されることが多いです。
つまり、FastCGIはパフォーマンス、セキュリティ、柔軟性の観点から主流となりつつあります。特に大規模なウェブアプリケーションや高負荷の状況では、FastCGIの利点が活かされます。
まとめ
以上のように、PHPの実行モードによって設定値を変更する方法が異なります。