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

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

ただいまの
回答率

89.65%

【AWS】 EC2でサーバー構築をしたが、画像アップロード機能が動作しない

受付中

回答 0

投稿

  • 評価
  • クリップ 1
  • VIEW 358

AWS初心者です。
EC2にてサーバー構築を行っているのですが、
画像アップロード機能がうまく動かず、詰まっております。

機能の概要といたしましては、

1)INPUT要素から画像をアップロード
2)base64に変換し、データベースへ格納
3)base64のデータをデコードし、サーバー内の 「upload_images」 フォルダへ格納
4)画像アップロードページに画像を表示

となります。

データベースには、base64形式で情報が入っているようですが、
画像データが 「upload_images」 フォルダに入りません。

デコードの時点で問題が起きていると考えているのですが、
サーバー構築する際のPHPのモジュールやphp.iniの設定など、
原因と思われることなんでも大丈夫ですので、アドバイスいただけないでしょうか。

なお、レンタルサーバーからAWSに移行で、レンタルDサーバーでは、問題なく動作しているので、
PHPの記述自体には、問題がないと考えております。

何卒よろしくお願いいたします。

■データベースに格納及びデコードする際のソース

<?php
      //データの数を確認する
        $stmt1 = $pdo->prepare('SELECT * FROM '.A_DB_NAME.'.'.TABLE_NAME.' ORDER BY disp_no');
        $stmt1->execute();
        while($row = $stmt1->fetch()){
            $disp_no[]=$row['disp_no'];
        }
        $add_disp_no=max($disp_no)+1;
        //データベースに追加する
        $stmt2 = $pdo->prepare('INSERT INTO '.A_DB_NAME.'.'.TABLE_NAME.' (img_date,img_title,img_url,disp_no,img_64,img_category,disp_select) VALUES (:img_date,:img_title,:img_url,:disp_no,:img_64,:img_category,:disp_select)');
        $stmt2->bindParam(':img_date', $img_date, PDO::PARAM_STR);
        $stmt2->bindParam(':img_title', $img_title, PDO::PARAM_STR);
        $stmt2->bindParam(':img_url', $img_url, PDO::PARAM_STR);
        $stmt2->bindParam(':disp_no', $add_disp_no, PDO::PARAM_STR);
        $stmt2->bindParam(':img_64', $img_64, PDO::PARAM_STR);
        $stmt2->bindParam(':img_category', $img_category, PDO::PARAM_STR);
        $stmt2->bindParam(':disp_select', $disp_select, PDO::PARAM_STR);
      $stmt2->execute();


        //idの最大値を取得を取得
        $stmt0 = $pdo->prepare('SELECT max(id) as max_id FROM '.A_DB_NAME.'.'.TABLE_NAME.' limit 1');
        $stmt0->execute();
        $row = $stmt0->fetch();
        $max_id = $row['max_id'];
        $file_name = ARTIST . '_' . $max_id .'.jpg';

        //base64をデコードしサーバーにアップロード
        $canvas = $img_64;
        $canvas = preg_replace("/data:[^,]+,/i","",$canvas);//ヘッダに「data:image/png;base64,」が付いているので、それは外す
        $canvas = base64_decode($canvas);//残りのデータはbase64エンコードされているので、デコードする
        $image = imagecreatefromstring($canvas);//まだ文字列の状態なので、画像リソース化
        //imagesavealpha($image, TRUE); // 透明色の有効
        imagejpeg($image ,'../upload_images/'. $file_name,60);//画像として保存(ディレクトリは任意)


        $stmt3 = $pdo->prepare('UPDATE '.A_DB_NAME.'.'.TABLE_NAME.' SET file_name = :file_name WHERE id = :max_id');
        $stmt3->bindParam(':file_name', $file_name, PDO::PARAM_STR);
        $stmt3->bindParam(':max_id', $max_id, PDO::PARAM_STR);
        $stmt3->execute();

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • CHERRY

    2019/02/01 20:42

    Webサーバーのログを確認して、記載していただけないでしょうか。

    また、php_info() の実行結果は、以前のサーバーと同じでしょうか?

    キャンセル

まだ回答がついていません

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

  • ただいまの回答率 89.65%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる