【PHP基礎】php.iniディレクティブ徹底解説
- 2023.06.01
- PHP基礎
- memory_limit, php.ini, post_max_size, upload_max_filesize
本記事では、ファイルアップロード時によく使用される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マニュアルに記載してありますのでうまく活用して見てください。