복사하신 후 사용하세요
/**
* 파일 업로드
*
* @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" 카테고리의 다른 글
- PHP 표준입력 (Scanf) (댓글 0개 / 트랙백 0개) 2009/02/26
- 검색 엔진 최적화 (SEO) 에 대한 검색엔진별 검색 결과 분석 (댓글 0개 / 트랙백 0개) 2010/05/19
- PHP MSSQL 프로시져 사용 (댓글 0개 / 트랙백 0개) 2009/06/11
- ImageMagick 을 이용한 PDF 이미지 변환 (댓글 0개 / 트랙백 0개) 2010/07/29
- PHP XML 다루기 - Document Object Model (댓글 1개 / 트랙백 0개) 2009/07/28
- MySQL - mysqli 를 사용할 수 없을때 멀티쿼리 및 MYSQL 내부 변수 선... (댓글 1개 / 트랙백 0개) 2010/02/05
- 웹 로그 분석 하기 (댓글 0개 / 트랙백 0개) 2010/05/19
- PHP FreeTDS 사용 (댓글 0개 / 트랙백 0개) 2009/06/12
- DTD란? (댓글 0개 / 트랙백 0개) 2009/03/31
- 검색엔진 최적화 : SEO (Search Engine Optimization) (댓글 2개 / 트랙백 0개) 2010/05/19
