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(); ?>
あなたの回答
tips
プレビュー