웹마스터 팁
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
아. 참고로 위 소스는 제가 제작한 게시판 소스 중 일부입니다...-_-;
제목 | 글쓴이 | 날짜 |
---|---|---|
윈도우XP 서비스팩2 사용자인지 아닌지 판별하기 [22] | 天高馬肥[쉬드] | 2004.10.09 |
echo 안에 더블쿼테이션을 사용하기 [15] | 토토루 | 2004.10.05 |
trim 과 addslashes를 일괄처리하는 함수 [7] | BigStone | 2004.10.02 |
'' -> ""로 만들기(?) [2] | 플로렐라 | 2004.09.17 |
crontab 실제 사용 예제, 온라인 웹 게임 운영하기 (팁 + 오픈 소스 게임 소개 ^^;) [1] | 박용구 | 2004.09.14 |
날씨별로 다양한 말이나 음악 보여주기[수정] [4] | 로크 | 2004.09.13 |
-긴급소스 수정본- winamp 방송정보 알아내기 | 이승원 | 2004.09.11 |
랜덤으로 파일 가져와서 재생하고, 끝나면 다른 랜덤파일 또 재생하기.. | 겜방 | 2004.09.10 |
썸네일 생성시 unsharp mask활용할수 있는 팁..소스 | 앗싸~~ 곰세마리 | 2004.09.06 |
Echo 여러번호출? 할때 깜빡임 없애기 [5] | 신희돈 | 2004.09.03 |
서브디렉토리,파일까지 모두 삭제하는 함수. [5] | Lepas | 2004.08.24 |
4. include, require 그리고 뽀나쓰~ [8] | 티다 | 2004.08.19 |
공유 메모리 제어에 관한 함수 정리 (공유메모리) [5] | Simsim | 2004.08.16 |
접속자 IP 주소 텍스트로 저장 [7] | 천상원 | 2004.08.15 |
PHP프로그램에 간단한 인증(로그인) 걸기. [15] | Lepas | 2004.08.09 |
파일업로드시 파일명 중복되지 않게 저장하기... [6] | 김지호 | 2004.08.06 |
ISO 3166 국가코드로인한, 국가 검출소스 [4] | kein23 | 2004.08.04 |
IP 뒤에 두칸 글자 길이에 따라서 *로 나타내기 [13] | Sy-Tgt(stargt) | 2004.07.30 |
php로 이미지를 mysql디비 저장하고 보여주는 소스 [2] | QQQ | 2004.07.30 |
디비내용을 엑셀,워드,파워포인트 파일로 다운로드 시키는 방법 [13] | QQQ | 2004.07.30 |