<?php
//업로드 폴더
$path = './upload/';
//파일이 정상적으로 서버까지 올라온 상태라면
$img_file = $_FILES['img']['tmp_name'];
if ($img_file)
{
#################
### 변수 정의 ###
#################
//그냥 파일명
$img_file_name = $_FILES['img']['name'];
//파일명 추출을 위한 배열 생성
$file_type_check = explode('.',$img_file_name);
//print_r($file_type_check);
//파일 확장자 체크
$file_type = $file_type_check[count($file_type_check)-1];
//echo $file_type;
//확장자를 제외한 파일명 추출
$i = 0;
while($i < count($file_type_check)-1){
$real_filename .= $file_type_check[$i];
$i++;
}
//echo $real_filename;
#######################################################
####### 파일 명에 숫자 붙여서 업로드 하는 형태 ########
#######################################################
//파일 존재 여부 체크
$exist_flag = 0;
if(file_exists($path.$real_filename.'.'.$file_type)){ //파일이 존재한다면
$i = 0;
while($exist_flag != 1){ //존재하지 않을때 까지 루프
if(!file_exists($path.$real_filename.'['.$i.'].'.$file_type)){ // 경로/파일명[$i].확장자 존재한다면
$exist_flag = 1; // 존재함을 표시하고
$img_file_name = $real_filename.'['.$i.'].'.$file_type; // 확인된 파일명으로 업로드 파일명 설정
}
$i++;
}
}
//파일 업로드
if(!@copy($img_file, $path.$img_file_name)) { echo("error"); }
#######################################################
####### 파일명을 업로드 시간으로 변경하는 형태 ########
#######################################################
//시분초.확장자
$img_file_name = date("YmdHis").'.'.$file_type;
if(!@copy($img_file, $path.$img_file_name)) { echo("error"); }
###################################################
####### 파일명에 업로드 시간을 붙이는 형태 ########
###################################################
//파일명_시분초.확장자
$img_file_name = $real_filename."_".date("YmdHis").'.'.$file_type;
if(!@copy($img_file, $path.$img_file_name)) { echo("error"); }
}
// 이건 간단한 업로드 형태이고,
// 최근 포털등의 업로드 형태는 가만... 보면
// 서버에 업로드 되었을때는 파일명 자체를 암호화(?) 등의 패턴 형태로 업로드 시키고,
// 업로드한 파일명을 따로 관리한다
// 즉 db 에 파일명 필드가
// 유저가 업로드한 파일명 || 실제 서버에 업로드 되어 있는 파일명
// 으로 구분해서 관리한다는 뜻이다.
// 위에 제시한 방식은 블로그 방문자의 요청에 의해
// 유저가 업로드 한 파일명을 컨트롤 하는 형태이다.
// 유저가 업로드한 파일명 || 실제 서버에 업로드 되어 있는 파일명 으로 관리하겠다고 하면
// 업로드 되는 파일명 자체를 md5 해서 쓰거나 str_replace(urlencode(파일명),'%','') 이런식으로 쓰는것도 나쁘지 아니한것 같다.
?>
[출처] [PHP] 파일업로드 시 파일명 관리|작성자 키에르