f896cb357810923cb5a870403eedd5eb1215bada.svn-base 5.49 KB
<?php

if(! class_exists("UploadUtil") )	{

class UploadUtil
{
	var $acceptExtension;
	var $LimitFileSize;

	function UploadUtil($LimitFileSize = 2097152, $Extension = NULL, $acceptExtension = FALSE)
	{
		/*
		$File 
		# 파일로 넘어온 데이터
		$Root
		# 파일이 저장될 디렉터리
		$Extension 
		# 업로드시 허용 또는 허용하지 않는 확장자명
		# 변수 타입 Array();
		$Extension_Type
		# 0 $Extension 으로 넘어오는 확장자 배열을 포함하면 업로드 허용
		# 1 $Extension 으로 넘어오는 확장자 배열을 포함하면 업로드 불가
		$Limit_File_Size
		# 업로드 할수 있는 파일용량 제한
		# 기본 : 2메가 (1048576)
		*/

		if(!isset($Extension))
		{
			$Extension = array("php","cgi","php3","php","asp","html");
		}else
		{
			$this->Extension = $Extension;
			
			//대문자로 들어오더라도 소문자로 변환
			for($i=0; $i<sizeof($this->Extension); $i++)
			{
				$this->Extension[$i] = strtolower($this->Extension[$i]);
			}
			
		}

		$this->acceptExtension = $acceptExtension;
		$this->LimitFileSize = $LimitFileSize;

	}
	
	
	
	//업로드 기본 패스 확인
	function Make_SavePath($savePath, $makeDayFolderFlag)
	{
		if($makeDayFolderFlag)
			$savePath = $savePath . "/" . date("Ymd");
				
		if(!file_exists($savePath))
		{
			if(!@mkdir($savePath, 0755, TRUE))
				$savePath = FALSE;	
		}
		
		return $savePath;
	}
	
		
	// 파일명중 확장자를 분리해준다.
	function File_Explode_Extension($File_Name){
		
		$Tmp = explode(".",$File_Name);

		if(count($Tmp) == 1)
		{
			return "";
		}
		else
		{
			return strtolower($Tmp[count($Tmp)-1]);
		}
		
	}
	
	
	//확장자 체크
	function File_Check_Extension($File_Name){
		
		$extension = $this->File_Explode_Extension($File_Name);
		
		if($extension == "")
		{
			return false;
		}
		
		for($i=0;$i <= count($this->Extension);$i++){
			
			//허용확장자에 포함되는 경우 - 확장자가 동일해야함
			if($this->acceptExtension && strcmp($this->Extension[$i],$extension) === 0){
				return true;
				break;
			}
			else if(!$this->acceptExtension && strcmp($this->Extension[$i],$extension) !== 0)
			{
				return true;
				break;
			}
		}
		
		return false;
	}
	
	
	//파일 크기 체크
	function File_Check_Size($File_Size){
		
		if($this->LimitFileSize < $File_Size){
			return false;
		}
		
		return true;
	}
	
	
	//유니크 이름 생성
	function File_Make_Unique_Name($FileName){
		
		$extension = $this->File_Explode_Extension($FileName);
		
		srand((double)microtime()*1000000) ;
		$Rnd = rand(1000000,2000000) ;
		$Temp = date("Ymdhis") ;
		return $Temp.$Rnd.".".$extension ;
		
	}
		
	
	function File_Check_Overlap($SavePath, $fileName){
		
		if(file_exists($SavePath."/".$fileName)){
			return false;
		}
		return true;
	}
	
	
	function removeFile($SavePath, $fileName)
	{
		@unlink($SavePath."/".$fileName);
	}
	
	
	
	//결과정보 전송
	function makeResult($returnCode, $returnMsg, $fileInfo = NULL)
	{
		$retVal = Array(
			"returnCode"	=> $returnCode,
			"returnMessage"	=> $returnMsg,
			"fileInfo"		=> $fileInfo
		);
		
		return $retVal;
	}
	
	
	function uploadOneFile($File, $BasePath, $SubPath, $makeDayFolderFlag = FALSE, $overlapFlag = FALSE, $MakeNewNameFlag = FALSE){
				
		$newFileName = $File["name"];
		if($SubPath != "")
			$SavePath = $BasePath . "/" . $SubPath;
		else
			$SavePath = $BasePath;
			
		//새로운 파일 이름 생성
		if($MakeNewNameFlag)
			$newFileName = $this->File_Make_Unique_Name($newFileName);	
		
		// HTTP POST를 통하여 업로드 된 파일인지 체크
		if(!is_uploaded_file($File["tmp_name"])){
			return $this->makeResult("-1", "비정상 접근");
		}
		
		// 우선 파일사이즈가 0인건 업로드 하지 않음
		if($File["size"] == 0 || !isset($File["size"])){
			return $this->makeResult("-2", "비정상 파일입니다.(사이즈 0)");
		}


		// 파일 확장자 체크
		if(!$this->File_Check_Extension($File["name"])){
			return $this->makeResult("-3", "허용되지 않은 확장자");
		}


		// 파일 사이즈 체크
		if(!$this->File_Check_Size($File["size"])){
			return $this->makeResult("-4", "업로드 용량을 초과하였습니다.");
		}

		// 에러 체크
		if($File["error"] === "0"){
			return $this->makeResult("-5", "파일이 비정상적으로 업로드 되었습니다 - {$File["error"]}");
		}

		// 파일 중복 체크
		if($overlapFlag && !$this->File_Check_Overlap($SavePath, $newFileName)){
			$this->removeFile($SavePath, $newFileName);
		}
		else if(!$overlapFlag && !$this->File_Check_Overlap($SavePath, $newFileName))
		{
			return $this->makeResult("-6", "이미 파일이 존재합니다.");
		}
		
		
		$SavePath	= $this->Make_SavePath($SavePath, $makeDayFolderFlag);
		$SubPath	= str_replace($BasePath . "/", "", $SavePath); 
		
		if($SavePath === FALSE)
		{
			return $this->makeResult("-7", "업로드 경로 확인");
		}

		
		//실제 업로드
		if(!@move_uploaded_file($File["tmp_name"], $SavePath."/".$newFileName)){
			return $this->makeResult("-8", "업로드 도중 에러가 발생함");
		}

		chmod($SavePath."/".$newFileName, 0755);

		$fileInfo = array(
			"re_name"	=> $newFileName,
			"name"		=> $File["name"],
			"tmp_name"	=> $File["tmp_name"],
			"error"		=> $File["error"],
			"type"		=> $File["type"],
			"size"		=> $File["size"],
			"extension"	=> $this->File_Explode_Extension($newFileName),
			"savePath"	=> $SavePath,
			"saveURL"	=> $SubPath . "/" . $newFileName
		);

		return $this->makeResult("1", "", $fileInfo); // 모든 파일을 업로드 한후 파일 정보를 넘겨준당.

	}


	
	
	
}

}