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

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

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

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

Q&A

解決済

1回答

434閲覧

画像サイズが大きい時にファイルのアップロードがうまくいかない

mikeko0901

総合スコア227

PHP

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

0グッド

0クリップ

投稿2020/09/30 09:41

編集2020/09/30 09:43

開発環境:AWSのcloud9
本番環境:AWSのEC2

商品の画像をアップロードする処理にて、ある程度大きい(確認できたのは、1.23メガ)写真をアップロードしようとするとうまく行きません。
また、この現象が、本番環境にのみ起きており、何が原因だかよくわからずに困っております。。

###正常 (開発環境にて)
イメージ説明

ファイルを選択から画像をアップロードし、更新をクリックすると、
イメージ説明

こんな感じで「更新が完了しました」と出、画像が登録されます。

###異常 (本番環境にて)
しかし、本番環境にて同じ写真をアップロードすると、
イメージ説明

どうやらajaxのerrorの方に帰ってきているようです。
consoleを見てみるとこのような画面になっていました。
イメージ説明

###実際のコード
登録部分も、編集部分も同じ状況なので、登録部分のコードを共有させていただきます。
add.php

<?php 既に登録されている情報を取得 ?> <!DOCTYPE html> <html> ヘッダー(省略) <body class="hold-transition sidebar-mini layout-fixed accent-info"> <div class="wrapper"> <section class="content"> <div class="container-fluid"> <div class="row"> <div class="col-12"> <div class="card"> <div class="mb-4 p-4"> <form method="post" action="" id="product_form"> <div class="form-group"> <div class="form-group row mt-4"> <label class="col-md-3 col-form-label">商品名(必須)</label> <div class="col-md-6"> <input type="text" class="form-control" name="name"> </div> </div> <div class="form-group row"> <label class="col-md-3 col-form-label">価格※税込(必須)</label> <div class="col-md-6"> <input type="text" class="form-control" name="price"> </div> </div> <div class="form-group row"> <label class="col-md-3 col-form-label">画像</label> <div class="col-md-6"> <input type="file" name="image"> </div> </div> <div class="form-group row"> <label class="col-md-3 col-form-label">説明(400文字以内)</label> <div class="col-md-6"> <textarea id="txta_memo" class="form-control" name="description" maxlength="400"></textarea> </div> </div> <div class="form-group row"> <label class="col-md-3 col-form-label">有効/無効</label> <div class="col-md-6"> <div class="form-check"> <input class="form-check-input" id="radio1" type="radio" value="1" name="yuko_flg"> <label class="form-check-label" for="radio1">有効</label> </div> <div class="form-check mt-2"> <input class="form-check-input" id="radio2" type="radio" value="0" name="yuko_flg"> <label class="form-check-label" for="radio2">無効</label> </div> </div> </div> <div class="error mt-4" id="result"></div> <div class="form-group row"> <div class="col-md-2 mt-4"> <button type="button" id="product_regist" class="btn btn-block btn-info">登録</button> </div> </div> </div> </form> </div> </div> </div> </div> </div><!-- /.container-fluid --> </section> <!-- /.content --> </div> <!-- /.content-wrapper --> <?php print($layout_footer); ?> </div> <!-- ./wrapper --> <!-- jQuery --> <?php print($layout_jquery); ?> <script> //登録をクリックした時の処理 jQuery(function($) { $("#product_regist").click(function() { //フォームのデータ一式 var product_form = new FormData($('#product_form').get(0)); $.ajax({ type: "POST", url: "add_done.php", processData: false, contentType: false, //dataType: 'json', data:product_form, success:function(data) { //戻ってきた時の処理 if(data == 1) { alert("更新が完了しました"); location.href= "list.php"; } else { console.log("失敗") alert(data); $("#result").html(data); } }, error:function(XMLHttpRequest, textStatus, errorThrown) { alert(errorThrown); } }); }); }); </script> </body> </html>

ajaxの先の処理 add_done.php

<?php //パラメーターの取得 $name = filter_input(INPUT_POST, "name"); $price = filter_input(INPUT_POST, "price"); $description = filter_input(INPUT_POST, "description"); $yuko_flg = filter_input(INPUT_POST, "yuko_flg"); //現在時刻 yyyymmddhhmmss $nowdate = date('YmdHis'); //画像 $file_tmp = $_FILES["image"]["tmp_name"]; $file_name = $nowdate . "_" . $_FILES["image"]["name"]; $file_save = "./img/" . $file_name; //安全対策 $name = r($name); $price = r($price); $description = r($description); $file_name = r($file_name); $result = ""; if($name == "") { $result = "※商品名が入力されていません"; } if($price == "") { $result = $result . "<br/>※価格が入力されていません"; } else { if (preg_match('/^[0-9]+$/', $price)) { } else { $result = $result . "<br/>※価格は数字のみでご入力ください"; } } //画像のサイズチェック if($_FILES["image"]["size"] > 5000000) { $result = $result . "<br/>※画像サイズが大きすぎます。推奨:4メガ未満"; } //エラーが空の時 if($result == "") { if(connect_db()) { if($file_name == "") { //テーブルに登録(画像がないとき) $sql = "INSERT INTO product (name,price,description,yuko_flg) VALUES (?,?,?,?);"; $stmt = $dbh->prepare($sql); $stmt->bindParam(1, $name); $stmt->bindParam(2, $price); $stmt->bindParam(3, $description); $stmt->bindParam(4, $yuko_flg); $stmt->execute(); //登録完了をセット $result = 1; } else {          //テーブルに登録(画像があるとき) move_uploaded_file($file_tmp, $file_save); //画像をフォルダにアップロード $sql = "INSERT INTO product (name,price,description,yuko_flg,image) VALUES (?,?,?,?,?);"; $stmt = $dbh->prepare($sql); $stmt->bindParam(1, $name); $stmt->bindParam(2, $price); $stmt->bindParam(3, $description); $stmt->bindParam(4, $yuko_flg); $stmt->bindParam(5, $file_name); $stmt->execute(); //登録完了をセット $result = 1; } } else { $result = "申し訳ございません。サーバー接続エラーが発生しました。"; } } $dbh = null; //結果を返す print $result; ?>

※ちなみに、画像のサイズが、700キロバイト程度の画像なら、問題なくアップロードできます。

エラー内容もなぜ本番環境だけだめなのかもよくわからず困っております。
アドバイスいただけますと幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

投稿2020/09/30 09:45

m.ts10806

総合スコア80861

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

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

mikeko0901

2020/09/30 14:24

post_max_size,upload_max_filesizeを知りませんでした!ありがとうございました! 関連記事もみてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問