- PHP
-
2025-06-08
PHP-FPMの.user.ini設定を少し深掘りしてみます。
ファイルのアップロード可能な容量制限を変更するとき、次のような設定をすることがあります。
memory_limit = 256M upload_max_filesize = 10M post_max_size = 12M
しかし、実はこれうまくいきません。
このうち.user.iniで完全に反映できるのはmemory_limitのみです。
他2つは.user.iniではphpinfo()
に反映されても、実際の動作には反映されない可能性が高いです。
ディレクティブ | .user.iniに設定 | phpinfo() に反映 | 動作に反映されるか |
---|---|---|---|
memory_limit | できる | 表示される | 動作にも反映 |
post_max_size | 一部反映される | 表示される | 動作には反映されない(FPM起動前に必要) |
upload_max_filesize | 一部反映される | 表示される | 動作には反映されない(FPM起動前に必要) |
なぜupload_max_filesize・post_max_sizeが効かないのか
これらはPHPがファイルやPOSTデータを受け取る前に使われる設定のためです。
post_max_size
:PHPがPOSTデータ全体を読み込む前に必要
upload_max_filesize
:ファイルアップロード制御も同様にPHPエンジンが処理を始める前に評価
.user.iniは「スクリプトが実行される直前」に読み込まれるため、POSTボディがすでに破棄された後ということになります。
正しい設定方法(PHP-FPM環境)
.user.iniではなくFPMの構成ファイル(www.conf)かphp.iniに設定します。
-
FPMプール設定:www.conf
php_value[upload_max_filesize] = 10M php_value[post_max_size] = 12M php_value[memory_limit] = 256M
-
.user.iniで可能な範囲で設定する場合
; /path/to/your/webroot/.user.ini memory_limit = 256M ; 以下は表示されるが動作に反映されない可能性あり upload_max_filesize = 10M post_max_size = 12M
ただし、前述の通りこれではアップロード制限などには影響しません。
まとめ
対象 | 推奨の設定場所 | 備考 |
---|---|---|
memory_limit | .user.ini or php.ini or www.conf | どれでもOK |
post_max_size | php.ini or www.conf | .user.ini ではNG |
upload_max_filesize | php.ini or www.conf | .user.ini ではNG |
補足1:.user.ini で効かない典型的な設定
ディレクティブ | .user.ini で効かない理由 |
---|---|
upload_max_filesize | PHPがPOSTデータを受け取る前に評価される |
post_max_size | 同上(HTTPリクエスト処理の段階) |
max_execution_time | スクリプトが開始する段階ではすでに設定が必要 |
max_input_time | 同上(リクエスト入力処理段階で必要) |
補足2:.user.ini の用途に向いている設定
ディレクティブ | 説明 |
---|---|
memory_limit | PHP実行中に使えるメモリ量 |
display_errors | エラー表示の有無 |
error_reporting | エラーレベルの設定 |
date.timezone | タイムゾーンの設定 |
この記事がお役に立ちましたらシェアお願いします

36 views