【PHP基礎】php.iniディレクティブ徹底解説

本記事では、ファイルアップロード時によく使用されるmemory_limit , post_max_size , upload_max_filesizeを用いてphp.iniのディレクティブと設定できるファイルの違いについて説明していきます。

php.iniディレクティブとは

php.iniディレクティブとは、主にphp.iniファイルに記述することのできる設定値で、使用するphpの環境に対して、メモリ容量の拡張を行ったりするための補足情報のようなものです。

本記事で紹介する3つディレクティブついて説明していきます。

memory_limit

メモリの上限値を設定するための0ディレクティブで、phpを使用したプログラムで多くのメモリを使用する処理を実装したい場合にmemory_limitの設定値を変更します。

設定値は、実行環境のphpが参照しているphp.iniの値を修正する必要があります。実際のメモリ容量の確認とphp.iniファイルの場所を確認するコマンドも記載します。

現在のメモリサイズ確認

php -i | grep memory_limit

php.iniの場所を確認

php -i | grep php.ini

メモリ上限設定

memory_limit = 512M

post_max_size

こちらは、フロントからアップロードされた画像や動画を含むデータをサーバサイドにPOST通信する際に送信できるデータサイズ上限を設定する際に頻繁に使用されるディレクティブです。

現在のPOSTデータ上限確認

php -i | grep post_max_size

POSTデータ上限設定

post_max_size = 512M

upload_max_filesize

画像データや動画などのファイルをアップロードする際の、1ファイルあたりのアップロードできるサイズ上限を設定できるのがupload_max_filesizeです。

デフォルトが2Mbyteとなっており、ファイルアップロード機能を使用する際には基本的に足りないので設定していく必要があります。

現在の1ファイルあたりのアップロードサイズ上限確認

php -i | upload_max_filesize

1ファイルあたりのアップロードサイズ上限上限設定

upload_max_filesize = 512M

各設定ファイルへの書き方

php.ini

php.iniはPHPの設定ファイルです。プロジェクトで使用するPHPに対しての設定を行うファイルで、php.iniディレクティブは基本的にこのファイルに記載するためのディレクティブになります。

php.iniへの書き方

memory_limit = 512M
post_max_size = 512M
upload_max_filesize = 512M

httpd.conf

webサーバであるapacheの設定ファイルです。webサーバに対しての設定ファイルであるため、httpd.confへ設定した値は、サーバ全体、プロジェクト全体に設定されます。

httpd.confへのディレクティブの書き方

PHP_Value memory_limit 512M
PHP_Value post_max_size 512M
PHP_Value upload_max_filesize 512M

.htaccess

webサーバの動作をディレクトリ単位で管理できるファイルです。httpd.confがwebサーバ全体にしか設定できないのに対し、.htaccessは任意のディレクトリに配置することで、配置した一部のディレクトリにだけ設定値を適用することができます。

一部ディレクトリでのみwebサーバの設定を変更したい場合に、設定値を上書きする意味合いで使用し、設定方法はhttpd.confと同じになります。

.htaccessへの書き方

PHP_Value memory_limit 512M
PHP_Value post_max_size 512M
PHP_Value upload_max_filesize 512M

.user.ini

php.iniへの設定は、プログラム全体に適用されるのに対し、.user.iniは配置したディレクトリに対して設定値を反映させることができます。ディレクトリ単位でphp.iniの設定を上書きしたい場合に使用します。

設定方法はphp.iniと同様になります。

.user.iniへの書き方

memory_limit = 512M
post_max_size = 512M
upload_max_filesize = 512M

ユーザスクリプト

自作のPHPファイル内に直接記述して設定を反映させる場合です。ディレクトリ単位よりもさらに狭い、一部の処理でのみメモリサイズを上げたい場合などに使用します。

設定方法は、ini_set()を使用します。

ini_set('memory_limit', '512M');

これらの設定ファイルについてまとめると以下のようになります。

  • php.iniとhttpd.confへの設定はプロジェクト全体に適用される。
  • .user.iniと.htaccessへの設定は配置したディレクトリに適用される。
  • ini_set()は一部の処理に適用できる。
  • .user.iniはphp.iniの設定を上書きでき、設定方法も同じ
  • .htaccessはhttpd.confの設定を上書きでき、設定方法も同じ

設定可能ファイルを決定するモードの違い

ここからは、ディレクティブごとに設定されているモードという概念について解説していきます。

モードとは

php.iniディレクティブは様々な設定ファイルに対して書き込むことができ、どの設定ファイルに書き込むことができるかはディレクティブごとに異なります。

各ディレクティブが書き込み可能なファイルを識別するための定義がモードです。

モードは以下の4種類に分けられています。

  • PHP_INI_USER
  • PHP_INI_PERDIR
  • PHP_INI_SYSTEM
  • PHP_INI_ALL

ここから実際に解説していきますが、各モードの説明についてはPHPマニュアルにも記載してあります。

モードごとの設定ファイル一覧

PHP_INI_ALL

全てのファイルで設定可能なディレクティブであることを示すモードです。主に使用することができるファイルは以下になります。

memory_limitはここに該当するため、どこでも設定することができます。

  • php.ini(PHPの設定ファイル)
  • httpd.conf(Apacheの設定ファイル)
  • .htaccess(webサーバの動作をディレクトリ単位で管理できるファイル)
  • .user.ini(ディレクトリ単位でphp.iniの設定を上書きできるファイル)
  • ユーザスクリプト内(自作のPHPファイル)

PHP_INI_USER

主にユーザスクリプト内と言われる自作のPHP内に記述して設定を変更できるディレクティブのモードです。上の章でも説明した通り、ini_set()でphpファイル内に記述することができます。

また、.user.iniファイルにも記述することができます。windowsレジストリというものにも書き込むことができるらしいです。

.user.iniやphpファイルの中で設定する値であるため、基本的には一部のディレクトリや一部の処理の時だけメモリサイズを上げたい時などに使用することが多いでしょう。

  • phpファイル
  • .user.ini

PHP_INI_PERDIR

ほぼ全ての設定ファイルに記述可能との認識で問題ないモードです。phpファイル内にini_set()の形式では設定できないため、多少不便に感じることもあるかもしれません。

post_max_size と upload_max_filesize はこのモードに該当しますので、phpファイルに直接書くことはできない点に注意しましょう。

  • php.ini
  • httpd.conf
  • .htaccess
  • .user.ini

PHP_INI_SYSTEM

サーバとPHPの設定ファイルにのみ記載可能なディレクティブのモードです。ログやキャッシュの設定値に関するディレクティブなど、部分的に変更不可能な設定値が該当しています。

  • php.ini
  • httpd.conf

最後に

本記事では、PHPマニュアルに記載している内容を噛み砕いてわかりやすく説明してきました。実際のディレクティブ一覧についてはPHPマニュアルに記載してありますのでうまく活用して見てください。