1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PHPの設定変更について: .htaccess vs php.ini

Last updated at Posted at 2023-05-27

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つあります。

  1. Apacheモジュール(mod_php)
  2. CGI(Common Gateway Interface)
  3. 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_flagphp_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の実行モードによって設定値を変更する方法が異なります。

参考記事

  1. PHP-FPM 環境で .htaccess に php_value を使用したら 500 Internal Server Error
  2. PHP.iniに設定する設定をhttpd.confや.htaccessに対して行うメリット
  3. LinuxとApacheの.htaccessファイル
  4. MovableType ドキュメンテーション - Apache + FastCGI で Movable Type を動かす
  5. CentOS8 + Apache + PHP の基本的な環境を整える
  6. PHPの処理速度を上げるための設定とは?PHP-FPMとmod_phpの違いを解説
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?