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 側での変更も可能