"파일 업로드"에 해당되는 글 1건

  1. 2009/02/27 PHP 파일 업로드 하기

PHP 파일 업로드 하기

2009/02/27 09:49


복사하신 후 사용하세요
	/**
	 * 파일 업로드 
	 *
	 * @param array $filearray	// 파일 배열 $_FILES['file'] 
	 * @param string $targetdir
	 * @param integer $max_size
	 * @param array $allowext
	 * @return boolean (FALSE) or string (uploaded filename)
	 * 
	 * 사용법
	 * 
	 * upload('파일배열', '업로드 디렉토리', '용량MB단위', '허용확장자');
	 * upload($_FILE['filename'], '/home/userdir/public_html/data/board/', 1, array('gif', 'exe', 'jpeg', 'jpg'));
	 * 
	 * 1. 정확한 확장자 처리를 위해서는 파일헤더를 분석해야 합니다. 
	 * 2. 정확히 업로드를 위해 저장전 파일의 오류코드를 처리하는것도 필요합니다. 
	 */
	




	function upload($filearray, $targetdir, $max_size = 1 /* MByte */, $allowext = array('gif', 'jpeg', 'png', 'jpg'))
	{
		$max_size = $max_size * 1024 * 1024;	// 바이트로 계산한다. 1MB = 1024KB = 1048576Byte
		if($filearray['size'] > $max_size) return false;
		else 
		{
			try {	// 특별한 경우를 위해 예외처리 
				/**
				 * 이부분은 파일명의 마지막 부분을 리턴시킵니다. 
				 * 
				 * 예를 들어 test.jpeg 이면 jpeg를 가져옵니다.
				 */
				$file_ext = end(explode('.', $filearray['name']));
				
				/** 함수 end
				 * end 는 배열의 마지막 원소를 가리키게 한 후 마지막 원소를 리턴 시킵니다. 
				 * array('a', 'b', 'c' , 'd') 이면 'd'를 리턴시킵니다.
				 */
				
				/** 함수 explode 
				 * explode 는 정해진 문자열 위 코드에서는 "." 를 이용해서 배열로 나눕니다. 
				 * 문자열 a.b.c.d 는 explode 를 거친후에는
				 * array('a', 'b', 'c','d') 가 됩니다. 
				 */
				
				
				/**
				 * in_array 는 배열에 해당 값이 있는지 찾습니다. 
				 * array(찾을원소, 배열) 
				 * 찾으면 true 못찾으면 false를 출력합니다.
				 */
				if(in_array($file_ext, $allowext)) // 확장자를 검사한다.
				{
					$file_name = time() . '.' . $file_ext; 
					// 중복된 파일이 업로드 될수 있으므로 time함수를 이용해 unixtime으로 파일이름을 만들어주고
					// 그 후 파일 확장자를 붙여줍니다. 정확히는 이 방식으로는 파일업로드를 정확히 중복을 체크했다고 할수 없습니다.
					
					$path = $targetdir . '/' . $file_name;
					// 파일 저장 경로를 만들어 줍니다. 함수 실행시에 입력받은 경로를 이용해서 만들어 줍니다. 
					
					if(move_uploaded_file($filearray['tmp_name'], $path)) 
					{
						// 정상적으로 업로드 했다면 업로드된 파일명을 내보냅니다
						// 이부분에 DB에 저장 구문을 넣어주시거나 파일명을 저장하는 부분을 넣어주시면 됩니다. 
						// 또는 리턴된 파일명으로 처리 하시면 됩니다. 
						return $file_name; 
					}
					else return false;
					// 실패 했을 경우에는 false를 출력합니다.
				}
				else return false;
			}
			catch (Exception $e)
			{
				throw new Exception('파일 업로드에 실패 하였습니다.');
			}
		}
	}

"Tip" 카테고리의 다른 글