カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

PHP-FPM .user.iniでアップロード可能容量設定

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適用可否
ディレクティブ .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に設定します。

  1. FPMプール設定:www.conf

    php_value[upload_max_filesize] = 10M
    php_value[post_max_size] = 12M
    php_value[memory_limit] = 256M
    
  2. .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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です