WebプログラミングU PHP

 目次へ 前へ 次へ

2008/7/15 久米

 

4 掲示板作成 オプション

4.5 画像ファイルアップロード

ファイルアップロードの処理

スクリプト作成

  1. テーブルbbsに 列名img データ型VARCHAR(32) で NULLがOKの列を追加。
  2. board.phpのあるフォルダ内に、新規フォルダuploadを作成。画像ファイル用フォルダです。
  3. board.phpのあるフォルダ内に、upload_img.phpを格納。画像ファイル名を教えてくれる関数が入っている。

 

board.phpの変更

<?php
・・・
require_once("upload_img.php");  
・・・
if(isset($_POST['sub'])){ ・・・ $up_img=upload_img();//$up_imgは画像ファイル名である $sql="INSERT INTO bbs2 (name, message, regidate, なにか記述) VALUES ('$name', '$message', now(), なにか記述)"; ・・・ } ・・・ while($row=mysql_fetch_array($rst)){ ・・・ if(strlen($row['img'])>0){ $body.="<p><img src='upload/".$row['img']."'></p>"; } } ・・・ ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>掲示板</title> </head> <body> <h1>掲示板</h1> <form name="f" method="post" action="<?php print $_SERVER['PHP_SELF']; ?>" enctype="multipart/form-data"> 名前:<input type="text" name="name"> <input type="submit" name="sub" value="投稿"><br> <textarea name="message" cols="80" rows="10"></textarea><br> 画像(GIF/JPEG形式100kB以下):<input type="file" name="uploadfile" size="40"> </form> <hr> <?php print $body; ?> </body> </html>

 

upload_img.php

サーバに保存した画像ファイル名を教えてくれる関数

<?php
//ファイルアップロード用関数
//使用例 $up_img=upload_img();
function upload_img(){
    //初期設定
    $FORMTAG="uploadfile";//フォーム投稿時の画像用inputタグ名
    $IMGFOLDER="upload";//画像を保存するフォルダ名(サーバ内)
    $MAXSIZE=100;//画像の最大サイズ(kbytes)
    
    $up_img="";//保存した画像のURL(サーバ内)。未保存の場合、空""。
    
    //以下のif文は、画像が無い場合、空文字をreturnしている。
    if(!isset($_FILES[$FORMTAG])) return $up_img;
    if(strlen($_FILES[$FORMTAG]['name'])==0) return $up_img;
    if(!is_uploaded_file($_FILES[$FORMTAG]['tmp_name'])) return $up_img;
    
    //拡張子の決定
    $ext="";
    if($_FILES[$FORMTAG]['type']=="image/gif"){
        $ext="gif";
    }else if($_FILES[$FORMTAG]['type']=="image/pjpeg" 
            || $_FILES[$FORMTAG]['type']=="image/jpeg"){
        $ext="jpg";
    }
    
    //画像URLの決定
    if($ext==""){
        exit("GIF/JPEG形式以外の画像ファイルは登録できません。");
    }else if($_FILES[$FORMTAG]['size']>$MAXSIZE*1000){
        exit("画像ファイルサイズが大きすぎます。".$MAXSIZE."kB以下にして下さい。");
    }else if($_FILES[$FORMTAG]['size']==0){
        exit("画像ファイルが存在しないか空のファイルです。");
    }else {
        $mt=microtime();
        $imgname=substr($mt, 11).substr($mt, 2, 6).".".$ext;//重複名にならないように現在時刻から命名
        if(move_uploaded_file($_FILES[$FORMTAG]['tmp_name'], "$IMGFOLDER/$imgname")){
            $up_img=$imgname;
        }else{
            exit("画像の投稿に失敗しました。");
        }
    }
    return $up_img;
}
?>