【Laravel】413 (payload too large) が出た時の対処法
目次
LaravelでPOST・ファイルアップロード時に413 (payload too large) エラーが出る原因と、php.iniでの上限設定の変更方法についてまとめました
エラー文
ファイルアップロードなど、サイズの大きい POST リクエストを送ると、次のようなエラーが返ってくることがあります。
413 Payload Too Large413 Request Entity Too Large自分の場合、プロジェクトを作るたびに目にするエラーです。
原因(ファイルサイズが上限を突破しているため)
サーバー(ロー カル・本番問わず)には、「POST で送信できるデータの上限」「アップロードできるファイルサイズの上限」が設定で決まっています。
これが無制限だと、極端に大きいファイルを送りつけられただけでサーバーが落ちてしまうため、デフォルトである程度小さめの上限が設定されています。
PHP の場合、この上限は php.ini の以下の 2 つの値で決まります。
upload_max_filesize
post_max_sizeupload_max_filesize: アップロードできる 1 ファイルあたりの最大サイズpost_max_size: POST リクエスト全体(ファイル+その他のフォームデータ)の最大サイズ
送りたいファイルのサイズがこのどちらかを超えていると、413 エラーになります。
現在の上限を確認する方法
phpでは、関数が用意されており、以下のコードでサーバーの設定を確認することができます。
<?php phpinfo() ?>エラーが起きているページの、Blade ファイルに書いてみてください。
ページを開くと、PHP のサーバー情報がずらっと表示されます。
その中から
upload_max_filesizepost_max_sizeLoaded Configuration File← 設定ファイルの場所
を探してください 。
現在の設定値が確認できます。
upload_max_filesize 30M 30M
post_max_size 30M 30M
/usr/local/etc/php/7.4/php.ini解決方法(実際に解決した方法)
私は動画ファイルなどサイズの大きいファイルを扱うことが多いため、上限を余裕を持って 30M に変更して解決しました。
先ほど確認した設定ファイルのパスを使います(2020 年当時の私の環境では PHP7.4 を使っておりますが、PHP のバージョンが変わってもやり方は同じです)
ファイルのパスは PHP のバージョンによって変わるので、ご自身の phpinfo() の Loaded Configuration File に表示されたパスに読み替えてください。
編集する項目は 2 箇所だけなので、ターミナルから Vim で直接書き換えました(以下は当時の環境でのパス例です)。
vim /usr/local/etc/php/7.4/php.iniVim を開いたら、
- 閲覧モードのまま
/を押して検索モードに入り、/upload_max_filesizeを探す upload_max_filesizeが見つかったら、aキーで編集モードにして数値を書き換える(8M→30M)ESCキーで閲覧モードに戻る/を押して検索モードに入り、post_max_sizeを探すpost_max_sizeが見つかったら、aキーで編集モードにして数値を書き換えるESCキーで閲覧モードに戻る:wqを入力し、保存・終了する
