サーバー上でPHPを利用していると、PHPの設定をphp.ini
を書き換えることなく、
特定のファイルや、ディレクトリないだけで変更したい場合がたまにあります。
つい先日も、自作のPHPファイルだけで有効になるよう、
post_max_size
とupload_max_filesize
の値をini_set
で値を変更したところ、値が反映されていない・・
php_info()
で設定値を確認しても、やっぱり変わっていなかったので、
ちょっと調べたところPHPマニュアルにがっつり書いていました。
PHPの各ディレクティブ(設定値)は、そのディレクティブのモードによって、
何処で設定出来るかが決まっているそうです。
PHPディレクティブとモードの一覧はこちら
post_max_size
やupload_max_filesize
は、
モードがPHP_INI_PERDIRだったので、ini_setでの設定変更が不可だったようです。
以下はそのモードについて。
PHP_INI_USER
PHPマニュアルを確認しても該当するディレクティブがないため気にしなくて良さそうなモード PHP5以前は使われていたらしく、以下の3つのみ設定変更可能なモード ・自作のphpファイルないでini_setコマンドを使って設定変更 ・[Windowsレジストリから設定変更](https://www.php.net/manual/ja/configuration.changes.php#configuration.changes.windows) ・.user.iniから設定変更(PHP5.3以降の場合)PHP_INI_PERDIR
php.ini、.htaccess、httpd.conf、.user.iniでのみ設定変更PHP_INI_SYSTEM
php.ini、httpd.confでのみ設定変更可能PHP_INI_ALL
自作PHPファイルでini_set、.user.ini、.htaccess、php.ini、httpd.confのどれでもも設定可能今回の場合、post_max_size
やupload_max_filesize
を変更するようの
.htaccessを作成して、自作PHPファイルが格納されているディレクトリに配置したところ、
そのディレクトリだけ設定が反映されてることが確認できました。
まとめ
昔、同じ理由で変更出来なかった事をすっかり忘れて、またハマってしまったため、
自分への戒めとして記事に残しときます。