웹마스터 팁
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
파일업로드시 파일명 중복되지 않게 저장하기...
2004.08.06 16:07
같은 제목으로 여러가지 팁이 올라와 있는거 같은데...
정말 간단한 방법이 있습니다.
PHP 함수중에 다음과 같은 함수가 있습니다.
tempnam ( string dir, string prefix)
기능은 특정 디렉토리에서 유일한 임시 파일이름을 만듭니다.
제로보드를 예로 들면 ($id 는 게시판아이디)
예를 들어서 tempnam("data/$id", "tmp_") 이렇게 입력하면,
data/$id/tmp_b20lmC
data/$id/tmp_PBjxzx
data/$id/tmp_cY30xB
...
이런 값들을 리턴하게 됩니다.
이렇게 하면 제로보드에서 파일 업로드시 중복파일 검사루틴이 필요 없게 되고, 필요없는 디렉토리 생성을 줄일수 있습니다.
정말 간단한 방법이 있습니다.
PHP 함수중에 다음과 같은 함수가 있습니다.
tempnam ( string dir, string prefix)
기능은 특정 디렉토리에서 유일한 임시 파일이름을 만듭니다.
제로보드를 예로 들면 ($id 는 게시판아이디)
예를 들어서 tempnam("data/$id", "tmp_") 이렇게 입력하면,
data/$id/tmp_b20lmC
data/$id/tmp_PBjxzx
data/$id/tmp_cY30xB
...
이런 값들을 리턴하게 됩니다.
이렇게 하면 제로보드에서 파일 업로드시 중복파일 검사루틴이 필요 없게 되고, 필요없는 디렉토리 생성을 줄일수 있습니다.
댓글 6
-
초인
2005.07.02 00:48
time(); <<< 요즘은 이렇게들 쓰는뎅..... -
앳플군
2004.08.06 19:48
대신에 파일을 다운로드 받거나 파일을 보여줄 때 (이미지나 swf 등등..) 를 따로 처리해 줘야 합니다.
그리고 기왕에 이름을 바꾸어 저장할 거면, md5_file 같은 함수로 파일 내용의 해쉬로 저장하고 카운트를 올리는 방법으로 HDD의 중복된 자료가 올라오는 것을 방지하는 방법도 추천할 만 합니다. (현재 제가 사용중입니다;) -
Pe-i
2004.08.08 12:35
저의경우 date("YmdHis")를 붙여버림;;; -
[락위듀]아렌티
2004.08.09 16:55
"id_년월일시분초"이렇게 지정하면 아예 중복을 막을 수 있지 않나요? -
Zective
2004.08.09 20:33
현재 제가 쓰고 있는 방식입니다.
--- lib.php 파일 중 일부분 ---
// 첨부자료 유무 체크
function ZF_Ex($kind, $filename,$zid) {
$exist_data = @mysql_query("SELECT ".$kind." FROM ".$zid." WHERE ".$kind." = '".$filename."'");
while($row = @mysql_fetch_row($exist_data))
if($row[0]==$filename) zecerror_a("이미 등록된 자료입니다.");
return 0;
}
// 첨부자료 체크 2004/06/14
function ZF_Check($file_tmp, $file_name, $filer) {
global $savedir;
$temp = explode(".",$file_name);
$size = sizeof($temp) - 1;
$front = str_replace(".".$temp[$size], "", $file_name);
$back = $temp[$size];
if(@eregi("'",$front)||@eregi(""",$front)||@eregi("\",$front)) {
zecerror_a("<b>파일명 에러</b><br>파일명에 ', ", \ 금지!");
}
if(eregi("inc",$back)||eregi("htm",$back)||eregi("php",$back)||eregi("asp",$back)||eregi("cgi",$back)||eregi("pl",$back)) {
zecerror_a("업로드 금지 확장자입니다.");
}
if(!file_exists($savedir.$file_name)) {
if(!is_uploaded_file($file = $file_tmp)||!move_uploaded_file($file, $savedir.$file_name)) {
zecerror_a("업로드 실패하였습니다.");
}
}
rename($savedir.$file_name, $savedir.$filer);
}
// 첨부자료명 강제변경 2004/06/14
function ZF_Change($file_name) {
$ftemp = explode(".",$file_name);
$ftsize = sizeof($ftemp) - 1;
$ftd = str_replace(".".$ftemp[$ftsize], "", $file_name);
$ftname = md5($ftd);
$filer = $ftname.".".$ftemp[$ftsize];
return $filer;
}
--- write_ok.php 파일 중 일부분 ---
$savedir = "data/".$id."/";
if($HTTP_POST_FILES['file1']) {
$upfile1 = "file1";
$file1_name = $HTTP_POST_FILES[$upfile1]['name'];
$file1_tmp = $HTTP_POST_FILES[$upfile1]['tmp_name'];
$file1_size = $HTTP_POST_FILES[$upfile1]['size'];
}
if($file1_name) {
if(!$_POST['d_file1'] && $zecmode=="modify") {
zecerror_a("기존 파일 #1 삭제를 체크하세요.");
} else {
@unlink($savedir.$ofile1r);
}
if(!ZF_Ex("file1", $file1_name, $zid)) {
$file1 = $file1_name;
$file1r = ZF_Change($file1);
ZF_Check($file1_tmp, $file1_name, $file1r);
}
} else {
if($_POST[d_file1]) {
unlink($savedir.$ofile1r);
$file1 = "";
} else {
$file1 = $ofile1;
$file1r = $ofile1r;
$file1_size = $ofile1s;
$file1d = $ofile1d;
}
}
$file1 = addslashes($file1);
최종적인 업로드파일관련 변수 $file1 에는 원래 파일명이 들어가죠.
하나만 업로드 가능한 방식이 아니라 간단히 추가시키면 무한대로 사용 가능하죠.
이렇게 보니까 엄청 조잡하게 됐군요-_-;
(왠지 저 소스도 비효율적으로 보이는군요-_-;)
주석 다는 버릇도 들여야 할 듯... -
Zective
2004.08.10 21:50
아. 참고로 위 소스는 제가 제작한 게시판 소스 중 일부입니다...-_-;
제목 | 글쓴이 | 날짜 |
---|---|---|
정말 멋있는 글자 변환 스크립트 [12] | sythesis | 2003.11.07 |
자바스크립트로 작성한 그림맞추기 퍼즐게임 [2] | 김별 | 2003.11.05 |
자바스크립트로 윈도우 흉내내기 (?) [15] | 뒹굴리스트 | 2003.11.03 |
[초간단 자바스크립트!] 이미지 드래그하기..~~ [8] | ∑Ztxy | 2003.11.02 |
마우스 이벤트 발생시 문서 상,하단으로 이동 [3] | RedEye(kaist) | 2003.10.30 |
클릭하면 홈페이지를 시작페이지로 하는 소스... [7] | 젤군 | 2003.10.28 |
식대 계산기... ^^ [3] | 김주형 | 2003.10.27 |
더 이상의 필터링은 없다!!! [10] | 미친개 | 2003.10.26 |
[초간단 자바스크립트!] 자바로 플래시 따라하기! [3] | ∑Ztxy | 2003.10.15 |
스물을 세면 죽음이야~~~ [20] | 미친개 | 2003.10.14 |
[초간단 자바스크립트!] 트랜지션 공지사항!! | ∑Ztxy | 2003.10.13 |
플래시 크기 바꾸기 [IE/NS 겸용] [4] | teslaMINT | 2003.10.13 |
새창 띄운후 부모창 확인없이 닫기... [4] | PHASE | 2003.10.12 |
개판 오분전 - 이미지 뷰에 관한 한가지 힌트 [5] | 미친개 | 2003.10.11 |
[초간단 자바스크립트!] 날짜 카운터! 커플홈에 강추!! [15] | ∑Ztxy | 2003.10.08 |
개판 오분전 만년달력......ㅡ,.ㅡ [4] | 미친개 | 2003.10.08 |
게시판 스킨에 프린트 버튼 추가하기 [3] | PHASE | 2003.09.30 |
[초간단 자바스크립트!] 홈페이지에 FTP 폼 넣기?! [10] | ∑Ztxy | 2003.09.29 |
[초간단 자바스크립트(강의)!] 입력박스에 입력한 주소로 이동하기... | ∑Ztxy | 2003.09.27 |
[초간단 자바스크립트(강의)!] 풀스크린 창 띄우기... [3] | ∑Ztxy | 2003.09.27 |