概要
個人的にハマったので、忘備録的な意味も含めて残しておく。
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
になっていれば問題ない。