Smartyで投稿画像アップロード

g_up.php

<?php
session_start();
if(isset($_SESSION['us']) && $_SESSION['us']!=null){ ➀

}else{
   session_destroy(); ➁
     header("Location: ./sailogin.php");
}
requiredirname__FILE__ ).'/libs/Smarty.class.php' );
$smarty = new Smarty();
$smarty->template_dir = dirname__FILE__ ).'/templates';
$smarty->compile_dir  = dirname__FILE__ ).'/templates_c';
$smarty->display('g_up.tpl');
?>

➀セッションが継続しているかチェック

➁セッションが存在しない場合画面遷移

g_up.tpl

<HTML>
<HEAD>
<META HTTP EQUIV='Content-Type' CONTENT='text/html;charset=UTF=8'>
<TITLE>ようこそABC写真へ!</TITLE>
</HEAD>
<BODY>
<P STYLE='color: red'>ABC写真</p>

<P>投稿内容</P>
<FORM ENCTYPE = 'multipart/form-data' ACTION ='g_up_set.php' METHOD ='post'>名前
<BR>
<INPUT TYPE='text' NAME='myn'><BR>メッセージ<BR>
<TEXTAREA NAME='mym' ROWS='10' COLS='70'></TEXTAREA><BR>
<INPUT TYPE='file' NAME='myf'>
<INPUT TYPE='submit' VALUE='送信'>
</FORM>
<P><A HREF='g.php'>一覧表示へ</A></P>
</BODY>
</HTML>

実行結果

f:id:mkyosuke:20191216155935p:plain

次にアップロードをさせた内容を受ける「g_up_set.php

<?php
session_start();

if(isset($_SESSION["us"]) && $_SESSION["us"]!=null){ ➀
$file = $_FILES['myf']; ➁

if($_POST['myn']<>""&& $_POST['myn']<>""&& $file['size']>0&& ➂
($file['type']=='image/jpeg'||$file['type']=='image/pjpeg')&&
(strtolower(mb_strrchr($file['name'],'.',FALSE))==".jpg")){
if($file['size']>1024*1024){ ➃
   unlink($file['tmp_name']);

   }else{
   //アップロードされた画像ファイルを移動
   $ima =date('YmdHis'); ➄
   $fn =$ima.$file['name']; ➅
   move_uploaded_file($file['tmp_name'],'./gz_img/'.$fn);
   
   $my_nam =htmlspecialchars($_POST['myn'],ENT_QUOTES); ➆
   $my_mes =htmlspecialchars($_POST['mym'],ENT_QUOTES);
   
   //サムネイルの作成
   $mgz=imagecreatefromjpeg("./gz_img/$fn"); ➇
   list($w,$h)=getimagesize("./gz_img/$fn"); ➈
   $new_h=200;
   $new_w=$w*200/$h;
   $mythmb=imagecreatetruecolor($new_w,$new_h); ➉
   imagecopyresized($mythmb,$mgz,0,0,0,0,$new_w,$new_h,$w,$h); ⑾
   imagejpeg($mythmb,"./gz_img/thumb_$fn"); ⑿
   
   //サムネイルの表示
   $filename=$file['name']; ⒀

   //データベースに追加
   require_once("db_init.php"); ⒁
   
   $ps =$db->prepare("INSERT INTO table1(nam,mes,ope,gaz,dat)
             VALUES(:v_n,:v_m,1,:v_g,:v_d)");
   $ps->bindParam(':v_n',$my_nam);
   $ps->bindParam(':v_m',$my_mes);
   $ps->bindParam(':v_g',$fn);
   $ps->bindParam(':v_d',$ima);
   $ps->execute();
   }
   }else{
   header('Location: ./g_saiup.php'); 
   }
   }else{
      session_destroy();
      print"<P>ログインしてください!<BR>
            <A HREF='g_login.html'>ログイン</A></P>";
   }
requiredirname__FILE__ ).'/libs/Smarty.class.php' );
$smarty = new Smarty();
$smarty->template_dir = dirname__FILE__ ).'/templates';
$smarty->compile_dir  = dirname__FILE__ ).'/templates_c';
$smarty->assign('filename'$filename);
$smarty->assign('fn'$fn);
$smarty->display('g_up_set.tpl');
?>

➀セッションが継続しているか

➁アップロードしてきたファイルを$fileに格納

jpegファイルかどうかのチェック

➃1MBより大きいファイルの場合、一時ファイルを削除

➄年月日時分秒を$imaに代入

➅アップロードしてきたファイル名を$imaと結合し$fnに代入

➆名前とメッセージの文字列の、タグをエスケープ

⑧画像IDを取得し、$mgzに代入

➈画像の大きさを配列で取得し、list関数に(画像の幅[0],画像の高さ[1])変数$wと変数 $hにそれぞれ格納

➉サムネイル用画像リソースを新規に作成し、この「画像ID」を$mythmbに代入。

⑪サムネイル用で作成した「$mythumb」を、元の画像ID「$mgz」のサイズを変更してコピー

⑫imagejpegで新規に作成したサムネイル画像$mythumb(画像ID)で、ファイルの先頭に「thumb_」を付けたファイル名で「gz_img」ディレクトリに保存。

⑬$file['name']を$filename変数に代入

⑭データベース初期化

⑮テーブル「table1」への登録

プリペアステートメントを使って、アップロード情報をテーブル「table1」に挿入。「table1」の各カラムにそれぞれのプレースホルダを用意し、bindParamでバインドしてexecuteでクエリの実行。

g_up_set.tpl

<HTML>
<HEAD>
<META HTTP EQUIV='Content-Type' CONTENT='text/html;charset=UTF=8'>
<TITLE>ようこそABC写真へ!</TITLE>
</HEAD>
<BODY>

<P><A HREF='g_up.php'>アップロード画面に戻る</A></P>

<P>{$filename}のアップロードに成功!<BR>
         <IMG SRC='./gz_img/thumb_{$fn}'></p>

<A HREF=g.php>一覧表示へ</A>
</BODY>
</HTML>

実行結果

f:id:mkyosuke:20191216160913p:plain

 一覧表示へクリック

 

f:id:mkyosuke:20191216162421p:plain

データベース

f:id:mkyosuke:20191216162725p:plain