投稿のアップロード
■投稿のアップロード
今度は画像をアップロードするプログラムです。g.php(画像とメッセージ一覧画面)の「アップロード」のリンクをすると表示されます。g_up.phpがアップロードのためのフォーム、g_up_set.phpがそれを受け取って処理するプログラムです。
g_up.php
<?php
session_start();
?>
<HTML>
<HEAD>
<META HTTP EQUIV='Content-Type' CONTENT='text/html;charset=UTF=8'>
<TITLE>ようこそABC写真へ!</TITLE>
</HEAD>
<BODY>
<P STYLE='color: red'>ABC写真</p>
<?php
if(isset($_SESSION['us']) && $_SESSION['us']!=null){ ①
?>
<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>
<?php
}else{
session_destroy();
print "<P>ログインしてください!<BR>
<A HREF=g_login.html'>ログイン</A></P>";
}
?>
</BODY>
</HTML>
①セッションの継続者かどうかをチェック
②<FORM ENCTYPE='multpart/form-data' ~>
フォームでファイルをアップロードする場合に使用する
③「データを識別する名前」
・「名前」を入力するテキストボックス「myn」
・メッセージが「mym」
・アップロードする画像ファイル名が「myf」
■送信した内容を受ける
「g_up.php」で送信した内容を受けるのが、次のg_up_set.phpです。アップロードされた画像のサムネイルを作ったり、データを保管したりします。
g_up_set.php
<?php
session_start();
?>
<HTML>
<HEAD>
<META HTTP EQUIV='Content-Type' CONTENT='text/html;charset=UTF=8'>
<TITLE>ようこそABC写真へ!</TITLE>
</HEAD>
<BODY>
<?php
if(isset($_SESSION["us"]) && $_SESSION["us"]!=null){ ①~
$file = &_FILES['mym']; ~①
②~
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']);
?>
<P><A HREF='g_up.php'>アップロード画面に戻る</A></P> ④
<?php
}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($mythumb,$mgz,0,0,0,0,$new_w,$new_h,$w,$h); ⑩
imagejpeg($mythumb,"./gz_img/thumb_$fn"); ⑪
//サムネイルの表示
print "<P>".$file['name']."のアップロードに成功!<BR>
<IMG SRC='./gz_img/thumb_$fn'></p>"; ⑫
//データベースに追加
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(); ~⑭
print"<A HREF=g.php>一覧表示へ</A>";
}
}else{
?>
<P>名前とメッセージを入力しJPEGファイルを選択してください<BR>
<A HREF='g_up.php'>再度アップロード</A></P>
<?php
}
}else{
session_destroy();
print"<P>ログインしてください!<BR>
<A HREF='g_login.html'>ログイン</A></P>";
}
?>
</BODY>
</HTML>
①セッションの継続者かチェックを行い、アップロードされたファイルの情報を「$file」に代入。
②jpegファイルかどうかのチェック
・入力してきた「名前」と「メッセージ」が空ではないか(入力されているか)
if($_POST['myn']<>""&& $_POST['myn']<>""
・「ファイルのサイズが0より大きい」か
&& $file['size']>0
・mb_strrchr関数(FALSEなので、指定した文字列の最後まで絞る)で、ファイル名の途中にある「.」からの拡張子を指定し、「.JPG」か「.jpg」になっているかを判断し、大文字「.JPG」はstrtolowerで文字列を小文字にして「.jpg」かどうかチェック
&&(strtolower(mb_strrchr($file['name'],'.'FALSE))==".jpg")){
③ファイルサイズのチェック
アップロードされた画像ファイルが1MBを超える処理を実行しない設定にする。
TRUEの場合、アップロードされたファイルを削除
if($file['size']>1024*1024){
④メッセージを表示しフォーム画面に戻ることを促す。
⑤年月日時分秒を$imaに代入し、画像ファイル名と$imaを結合したものとして、変数$fnに代入。送信してきた一時ファイル($file['tmp_name']を「gz_img」ディレクトリに、新たな名前('./gz_img/',$fn)にして保存する。
⑥名前とメッセージの文字列の、タグをエスケープ
⑦imagecreatefromjpegで画像IDを取得し、$mgzに代入
⑧getimagesizeで画像の大きさを配列で取得し、list関数に(画像の幅[0],画像の高さ[1])変数$wと変数$hに入れる。
⑨サムネイル用画像リソースを新規に作成し、この「画像ID」を$mythmbに代入。
⑩先ほどサムネイル用で作成した「$mythumb」を、元の画像ID「$mgz」のサイズを変更してコピーする
⑪imagejpegで新規に作成したサムネイル画像$mythumb(画像ID)で、ファイルの先頭に「thumb_」を付けたファイル名で「gz_img」ディレクトリに保存。
⑫サムネイル画像の表示
⑬データベース接続
⑭テーブル「table1」への登録
プリペアステートメントを使って、アップロード情報をテーブル「table1」に挿入します。「table1」の各カラムにそれぞれのプレースホルダを用意し、bindParamでバインドしてexecuteでクエリを実行します。
「実行結果」
「ファイルを選択」
「送信」ボタンをクリック
「一覧表示へ」
データベース
画像ファイル