PHP でファイルアップロード処理を実装する場合
雑に .htaccess で post_max_size や upload_max_filesize を変更したり
メモリでコケたら ini_set() で memory_limit を変更することがある
あるよね?
(環境構築時に要件に応じた設定ができていれば、それがベストなんだろうけど)
今回、upload_tmp_dir ディレクティブを変更する際、恥ずかしながら初めてモードの存在を知ったので
自分への戒め
PHP ディレクティブ モード
PHP ディレクティブには
以下のいずれかのモードが定義されており、モード毎に変更を指定可能な方法が異なる
https://www.php.net/manual/ja/configuration.changes.modes.php
例えば upload_tmp_dir ディレクティブは PHP_INI_SYSTEM モードであるため
.htaccess や ini_set() では変更できない
https://www.php.net/manual/ja/ini.list.php
設定ファイル
| 設定ファイル | 区分 | 影響範囲 | 備考 |
|---|---|---|---|
| php.ini | PHP | 全体 | |
| httpd.conf | Apache | 全体 | |
| .htaccess | Apache | ディレクトリ単位 | |
| web.config | IIS | ディレクトリ単位 | |
| .user.ini | PHP | ディレクトリ単位 | PHP 5.3.0 以降 |
| ini_set() | PHP | スクリプトレベル |
ただし、Web サーバ(Apache、IIS)により使用できる設定ファイルが異なる
例えば PHP_INI_PERDIR モードのディレクティブを変更する場合
よくある Apache サーバの場合は .htaccess や httpd.conf を使用できるが
Windows 上で稼働している IIS サーバの場合は web.config を使用して設定を行う必要がある
または .user.ini を使用した PHP 側での変更も可能