開発環境: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キロバイト程度の画像なら、問題なくアップロードできます。
エラー内容もなぜ本番環境だけだめなのかもよくわからず困っております。
アドバイスいただけますと幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/30 14:24