質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

1回答

2683閲覧

Docker(laradock)環境で画像をアップロードしようとするとnginxの「413 Request Entity Too Large」のエラー

bokupiroki

総合スコア54

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2021/05/27 14:18

編集2021/06/07 09:13

前提・実現したいこと

・laravel6でフォームから動画を投稿できる機能を実装中
・MacのDocker上で開発中
・送信(post)するとファイルによっては失敗する

発生している問題・エラーメッセージ

413 Request Entity Too Large

該当のソースコード

php

1//StockController.php(コントローラー) 2 public function create(Request $request) 3 { 4 //中略 5 6 $request->file('stock_file')->storeAs('private/stock_data',hogehoge.mp4); 7 8 //中略 9 10 return redirect()->route('stocks.detail', [ 11 'stock_id' => $stock->id, 12 ])->with('message', '投稿しました。'); 13 }

php

1//create.blade.php(ビューファイル) 2 3//中略 4 5<form method="post" action="/stock" enctype="multipart/form-data"> 6 @csrf 7 8//中略 9 10 <div class="form"> 11 <div class="form-title"> 12 <div class="form-group"> 13 <span id="file_input_area"> 14 <input type="file" class="form-control-file " id="myImage" name="stock_file" 15 onChange="stockPreView(event)" accept=".mp4"> 16 </span> 17 </div> 18 19//中略 20 21 <div class="form-submit"> 22 <button type="submit" class="btn btn-warning cart_button btn-lg btn-primary btn-lg btn-block"><i 23 class="fas fa-plus-square">投稿する</i></button> 24 </div> 25 </div> 26</form> 27 28//中略

試したこと

postするファイルの最大サイズにまつわる部分を思いつく限り書き換えました。

↓laradock\nginx\nginx.conf

conf

1http { 2//中略 3 client_max_body_size 20000M; #数値を20Mから変更 4//中略 5}

↓laradock\nginx\sites\default.conf

conf

1server { 2//中略 3 client_max_body_size 20000M; #追加 4}

↓laradock\php-fpm\php7.3.ini

ini

1;中略 2post_max_size = 20000M ;8Mから変更 3 4;中略 5upload_max_filesize = 20000M ;2Mから変更 6 7;中略 8memory_limit = 2560M ;256Mから変更

↓その後、もろもろ再起動

docker-compose restart nginx mysql phpmyadmin Restarting laradock_nginx_1 ... done Restarting laradock_phpmyadmin_1 ... done Restarting laradock_mysql_1 ... done

↓php-fpmの再起動を失念していたので再起動

shimizudaisuke@shimizudaisukenoMacBook-Pro laradock % docker-compose restart nginx mysql phpmyadmin php-fpm Restarting laradock_nginx_1 ... done Restarting laradock_php-fpm_1 ... done Restarting laradock_phpmyadmin_1 ... done Restarting laradock_mysql_1 ... done

すると、アップロード時にブラウザに表示されていたnginxのエラー表示が、laravelの
lluminate\Http\Exceptions\PostTooLargeException
というエラー表示に変わりました。

↓(詳細)

Illuminate\Foundation\Http\Middleware\ValidatePostSize::handle vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php:24

php

1 public function handle($request, Closure $next) 2 3 { 4 $max = $this->getPostMaxSize(); 5 if ($max > 0 && $request->server('CONTENT_LENGTH') > $max) { 6 throw new PostTooLargeException;//24行目 7 } 8 return $next($request); 9 }

ValidatePostSize.phpというファイルを触ったことはありませんが、どちらにしてもファイルサイズが許容する値よりも大きいとのエラーが出ているように見えます。

アップロードしようとしたファイルは30MBほどデータなので、それぞれの設定ファイルを書き換えた後で
本来あれば問題ないのではないかと思いました。

これ以上どこを触ればいいのか見当がつきません。

知恵を貸していただきたいです。

補足情報(FW/ツールのバージョンなど)

laravel6
Docker version 20.10.0
PHP 7.3.24-3+ubuntu18.04.1
Composer version 2.0.8

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

attakei

2021/05/27 14:58

> ↓その後、もろもろ再起動 > > docker-compose restart nginx mysql phpmyadmin > Restarting laradock_nginx_1 ... done > Restarting laradock_phpmyadmin_1 ... done > Restarting laradock_mysql_1 ... done この再起動対象の中にはphp-fpmを動作させているコンテナが含まれてなさそうですが、一度これも再起動したほうが良さそうな気がします。
bokupiroki

2021/05/27 15:17

ご指摘ありがとうございます。 確かに再起動していなかったので、先ほどphp-fpmも再起動しました(質問欄にもその旨追記) しかし、結果は同じでした。
guest

回答1

0

php.iniでファイルアップロード上限量の設定をおこなってください。
phpのデフォルト設定では2MBまでしか送れなかったはずです。

php

1post_max_size 2upload_max_filesize

この2つの容量が、おそらくアップロードしようとしている画像ファイル未満にしか設定されていないはずです。
Request Entity Too Large

つまり、大きすぎるってことです。

設定が終わったら、Nginxとphp-fpmの双方を再起動してください

※いちおう、htaccessでも設定はできます。

投稿2021/06/03 00:10

編集2021/06/03 00:19
FKM

総合スコア3640

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bokupiroki

2021/06/05 00:23

ありがとうございます。 「試したこと」で laradock\php-fpm\php7.3.ini を編集したと書いていたのですが、これとはまた別のファイルなのでしょうか。 このファイルがphp.iniに当たると思ったのは、 docker環境でphp7.3を参照しているからです。
FKM

2021/06/05 01:25

そこにpost_max_sizeとupload_max_filesizeの設定があるでしょうか? また、レンタルサーバならレンタルサーバ側で手動設定しないといけない場合もあります。
bokupiroki

2021/06/06 12:58

あります。 レンタルサーバーならphp.ini触って終わりだと思うのですが、 今回はローカルPC上のDocker環境のためどうしたらいいかわからず困っています。
kiino

2021/06/11 20:16

横から失礼します。 docker-compose.yaml の中身がわからず、 質問者様がどこまで設定されているかわからないのですが、 以下のどちらかでコンテナ内に回答者様の設定した php.ini をコンテナ内に配置できると思います。 - カスタムした php.ini の追加を Dockerfile で追加させたイメージをつくる - php.ini を含めたディレクトリを、コンテナにマウントさせる (yaml については見落としでしたらすいません)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問