본문 바로가기

프로그래밍/PHP

다중 파일 업로드 소스 한글파일 업로드 (파일명 수정해서 저장)


간단하게 올리고 db에 저장할 수 있도록 문자열로 반환하는 소스입니다.

이대로 사용해도 되고 적당히 변경해서 사용해도 좋습니다.
 

업로드 폼에 파일명은 upfile[] 로 하면 알아서 처리합니다.

<form name="f" method="POST" action="up.php" enctype="multipart/form-data">
 <input type="file" name="upfile[]" />
 <input type="file" name="upfile[]" />
 <input type="submit" value="upload" />
</form>

 

// 임시 파일명 생성
function rand_str(){
 $str = "";
 $alp = array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z");
 for( $i=0; $i < 4; $i++ ){
  $str .= $alp[rand(0,25)];
 }
 list($usec, $sec) = explode(" ", microtime());
 $str .= date('ms') . str_replace("0.","",(string)(float)$usec); // 분초 . 마이크로타임
 return $str;
}

// 파일명 확장자 배열로 반환
function get_filename($fname){
 $fext  = array_pop(explode('.', $fname)); // 확장자
 $fname = basename($fpath, '.'.$fext); // 파일명
 $return = array($fname,$fext);
 return $return;
}

// 업로드 폼으로 넘어온 $_FILES 내용이 있어야 함 name="upfile[]"
// 반환값 string : "경로/수정파일명|기존파일명"
function upload_file($uf){
 $db_in_str = "";
 $chk_files = false;
 foreach ($_FILES["upfile"]["error"] as $error) if ($error == UPLOAD_ERR_OK) $chk_files = true;
 if( $chk_files ){
  $date_str = (string)date("Y/m/d/"); // 날짜 폴더
  $ud = $uf . $date_str;
  $uploads_dir = $_SERVER["DOCUMENT_ROOT"] . $ud;
  
  @mkdir($uploads_dir, 0777, true); // 폴더 생성
  if( is_dir($uploads_dir) ){
   // multi upload start
   foreach ($_FILES["upfile"]["error"] as $key => $error) {
       if ($error == UPLOAD_ERR_OK) {
           $tmp_name = $_FILES["upfile"]["tmp_name"][$key]; // 업로드된 임시 파일
           $name = $_FILES["upfile"]["name"][$key]; // 원본 파일명
           $tn = get_filename($name);
           $rename = rand_str() . "." . $tn[1] ; // 수정 파일명 + 확장자
           //$_FILES["upfile"]["rename"][$key] = $rename;
           $muf = move_uploaded_file($tmp_name, $uploads_dir."/".$rename); // 파일 이동
           if( $muf ){
            // true = 파일 이동 성공
            if( $key > 0 ) $db_in_str .= "||";
            $db_in_str .= $ud.$rename."|".$name;
           }else{
      // false = 파일이동 실패
      go("/","파일 업로드 실패");
           }
       }
   }
  }
 }//if
 return $db_in_str;
}

 

// 사용

$str = upload_file("/UPLOAD/board/"); // 반환값 : 업로드된 경로/파일명|원본파일면|| ......

// 출력확인
echo $str; 

'프로그래밍 > PHP' 카테고리의 다른 글

XML Parser Return Array  (0) 2012.01.27