upload_max_filesizeとpost_max_sizeの違いは? PHPでファイルアップロードする際のサイズ上限設定方法

スポンサーリンク

概要

個人的にハマったので、忘備録的な意味も含めて残しておく。

PHPによるファイルアップロードの際のファイルサイズ上限には2つの設定値がある。

  • upload_max_filesize
  • post_max_size

upload_max_filesize

1つのファイルの最大ファイルサイズ。
この値を超えてしまうと$_FILES["hogehoge"]["error"]にUPLOAD_ERR_INI_SIZEがセットされる。
※hogehogeはinputタグのname属性

if ($_FILES["hogehoge"]["error"] === UPLOAD_ERR_INI_SIZE) {
    // エラー処理
}

post_max_size

こちらはPOST送信全体のデータサイズ上限。
例えば、type=fileのinputタグが10個ありupload_max_filesizeの値が2Mの場合、post_max_sizeは20Mよりも大きい値にする必要がある。
そして(ここが個人的にハマったポイントだが)、このpost_max_sizeを超えるサイズのPOST送信があった場合、$_FILES["hogehoge"]["error"]はnullとなり、エラーコードはセットされない。
(ファイルデータ自体がPOST送信されてこないので、当然なのかもしれないが。。)

設定方法

php.iniや.htaccessで設定する。
レンタルサーバの場合は、契約しているサーバによって設定方法が異なる。
さくらインターネットの場合は、以下のような内容のphp.iniをドキュメントルートにアップしておけばよい。

upload_max_filesize = 5M
post_max_size = 51M

備考

memory_limitという設定項目もあるが、デフォルト値が128Mなので通常はそのままで問題ない。
動画ファイルなど大きなファイルアップロードを行う場合は設定が必要となる。
memory_limit > post_max_size > upload_max_filesize
になっていれば問題ない。

関連記事

コメント