본문 바로가기
Web Program/Php Lecture

다중 파일 업로드 처리.

by 현이빈이 2010. 5. 17.
반응형

다중 파일 업로드 처리 모듈이 필요해 졌다.

오랜만에 만져보는 php.
웬지 낯설다~~

풀소스를 올리진 않는다.
필요한 부분은 어느정도 노력해서 만들어야 하지 않겠는가~~


write.html

<SCRIPT LANGUAGE="JavaScript">
    var img_cnt = '';
    function ImageUploader(){
     if(img_cnt < 50) {
        eval('imgs_up' + img_cnt).innerHTML += "<input type=\"file\" name=\"ufile_name[]\" size=\"70\" onchange=\"javascript:ImageUploader()\" style=\"background-color: #f6f5ef; BORDER-RIGHT: #cdd2dd 1px solid; PADDING-RIGHT: 2px; BORDER-TOP: #cdd2dd 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 12px; PADDING-BOTTOM: 0px; BORDER-LEFT: #cdd2dd 1px solid;  PADDING-TOP: 1px; BORDER-BOTTOM: #cdd2dd 1px solid; HEIGHT: 18px\" /><div id='imgs_up" + (img_cnt+1) + "'></div>";
     } else {
          alert('최고 50개까지만 업로드 할 수 있습니다');
     }
     img_cnt++;
    }
</script>


<input type="file" name="ufile_name[]" size="70" onchange="javascript:ImageUploader()" style="background-color: #f6f5ef; BORDER-RIGHT: #cdd2dd 1px solid; PADDING-RIGHT: 2px; BORDER-TOP: #cdd2dd 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 12px; PADDING-BOTTOM: 0px; BORDER-LEFT: #cdd2dd 1px solid;  PADDING-TOP: 1px; BORDER-BOTTOM: #cdd2dd 1px solid; HEIGHT: 18px" />
                                            <div id='imgs_up'></div>





save.php

if ($_FILES['ufile_name']) {
  fixFilesArray($_FILES['ufile_name']);
  $i=0;
  foreach ($_FILES['ufile_name'] as $position => $ufile_name) {
     // should output array with indices name, type, tmp_name, error, size
     //var_dump($ufile_name);
    
    
     if($ufile_name[name]) {
    // 확장자 검사
    if($ufile_name[name] && eregi(".gif$", $ufile_name[name])==false && eregi(".jpg$", $ufile_name[name])==false) {
     errorMessage("이미지 파일은 gif, jpg만 가능합니다.");
     exit;
    }   
    $file_size[$i] = $ufile_name[size];  
    $tempImageName[$i] = $ufile_name[name];
    
    //echo $tempImageName[$i] . "<BR>";
    //exit;
    //max 사이즈 체크
    $POST_MAX_SIZE = ini_get('post_max_size');
    $mul = substr($POST_MAX_SIZE, -1);
    $mul = ($mul == 'M' ? 1048576 : ($mul == 'K' ? 1024 : ($mul == 'G' ? 1073741824 : 1)));
    if ($_SERVER['CONTENT_LENGTH'] > $mul*(int)$POST_MAX_SIZE && $POST_MAX_SIZE) {
     errorMessage("업로드 용량이 초과 되었습니다.");
     exit;
    }
    
    // 업로드 
    $array_upload = file_upload($root_file_path, $ufile_name, $tempImageName[$i], 3072);
    $flag_file[$i]      = $array_upload['exec_flag'];
    $error_file[$i]     = $array_upload['error_msg'];
    $real_file_name[$i] = $array_upload['file_name'];
    
       
    if ($error_file[$i]) {
     print_r($error_file[$i]);
     //errorMessage($error_file[$i]); 
    }
    
    $i++;
   }
  }
 }



lib_file.php

function file_upload($root_directory, $array_file, $file_name, $approve_size=0) {
 if(eregi("/$", $root_directory) == false) {
  $root_directory .= "/";
 }

 $return_array = array();

 $image_origin = $array_file['origin'];
 $image_name   = $array_file['name'];
 $image_size   = $array_file['size'];
 $image_type   = $array_file['type'];
 $image_temp   = $array_file['tmp_name'];

 if($image_size<=0 || $approve_size<($image_size/1024)) {
  $return_array['error_msg'] = "파일의 크키가 없거나".$approve_size."KB 이상인 경우 업로드 할 수 없습니다.";
  $return_array['exec_flag'] = false;
  return $return_array;
}
 //동일 파일 검사
  if(file_exists($root_directory . "/" .$file_name)) {
   
   $j = 0;
   $strfilename = $file_name;
  while(1) {
   $j++;
   if(!file_exists($root_directory . "/" .$strfilename))
    break;
   else  {
     $result = substr($file_name,0,strrpos($file_name,'.')); //파일이름
    $result1 = substr($file_name,strrpos($file_name,'.')); //파일확장자

     $strfilename = $result."_".$j.$result1;
    }
   }
    } else {
     $strfilename = $file_name;
    }
     

 $upload_file_name = $strfilename; 
 
 // 디렉토리 권한 변경
 @chmod($root_directory, 0777);
 
 if ($image_origin == "")
  $image_origin = $image_temp;

 
 //파일 업로드를 함
 if(@move_uploaded_file($image_origin, $root_directory.$upload_file_name) == false) {
  $return_array['error_msg'] = "파일 업로드에 실패하였습니다.";
  $return_array['exec_flag'] = false;
  return $return_array;
 }

 // 이미지 권한 변경
 @chmod($root_directory.$upload_file_name, 0755);

 $return_array['file_name'] = $upload_file_name;
 $return_array['exec_flag'] = true;
 return $return_array;
}

반응형