업로드시 그림 파일명이 한글일경우 이름 자동 변경하기
작성자 : 김영철
등록날짜 : 2009.01.14 22:21
History
2004. 11.22 19:50분 첫 등록
태권동자님과 유메미루님이 올리신 팁에서 2가지 문제를 수정하여 등록
영문 파일이름중 띄어쓰기가 되어 있는 파일일 경우 에러 수정. 예:test ts.jpg
파일명 중간에 마침표가 있을 경우 전체 파일명이 수정되지 않는 현상수정. 예:여행.사진.나.jpg
2004. 11.25. 15:10분 1차 수정
다른 문제점이 발견됨..유닉스 동호회에 이미 여러 문제를 고쳐놓은 소스가 있어.. 얻어서 제로보드에 맞게 수정하여 등록
그림화일 이외의 한글파일 (예: 그림묶음.zip) 의 경우 확장자가 누락되는 현상수정..예:그림묶음.zip
" ' " 문자가 포함된 그림파일일 경우 인식이 되지 않는 현상수정..예: abc'abc_01.jpg
2004. 11.26 11:50분 2차 수정
user_id 가 관리자 이외에는 들어가지 않는 현상수정..
2004. 11.26 15:05분 3차 수정
파일이름 중간에 그림확장자가 들어간 한글명인 일반 파일일 경우.. 강제로 이름이 변경되는 현상 수정 예:그림묶음.jpg.zip
기본 소스를 제공해주신 유닉스 동호회 insulaun 님께 감사드립니다.
---------------------------------------------------------------
일단 기본적으로 화일의 중복을 최대한 막기위해 회원일 경우 화일이름앞에 글쓴이의 아이디가 들어가도록 하였고, 비회원일 경우 0~999 까지의 숫자가 랜덤하게 들어가도록 하였습니다.
비회원 몇십명이 한 게시판에서 완전히 동일한 시간에 글을 작성하여도 파일이름이 중복되는 것을 막기 위함입니다..
--------------------------------------------------------------
수정할 내용은 다음과 같습니다..
write_ok.php 에서 아래 부분을 찾아서 밑에 글을 추가해 주시고,,
/***************************************************************************
* 업로드가 있을때
**************************************************************************/
if($HTTP_POST_FILES[file1]) {
$file1 = $HTTP_POST_FILES[file1][tmp_name];
$file1_name = $HTTP_POST_FILES[file1][name];
$file1_size = $HTTP_POST_FILES[file1][size];
$file1_type = $HTTP_POST_FILES[file1][type];
}
if($HTTP_POST_FILES[file2]) {
$file2 = $HTTP_POST_FILES[file2][tmp_name];
$file2_name = $HTTP_POST_FILES[file2][name];
$file2_size = $HTTP_POST_FILES[file2][size];
$file2_type = $HTTP_POST_FILES[file2][type];
}
------------ 윗 글 아래에 다음을 추가
//추가 한글그림화일 이름 변경...
if($member[no]!=0) {
$user_no=$member[no];
$user_id_c=mysql_fetch_array(mysql_query("select user_id from $member_table where no='$user_no'"));
$user_id_r=$user_id_c[0];
}
else {
srand(time()); // 중복 방지를 위한 램덤출력.
$ran_c = (rand()%999); //0~999 숫자중 랜덤 출력
$user_id_r=$ran_c;
}
-----------여기까지...-------
같은 wriite_ok.php 파일에서 내려가다 보면
$file1=eregi_replace("\\\\","\\",$file1);
$s_file_name1=str_replace(" ","_",$s_file_name1);
$s_file_name1=str_replace("-","_",$s_file_name1);
// 디렉토리를 검사함
if(!is_dir("data/".$id)) {
@mkdir("data/".$id,0777);
@chmod("data/".$id,0706);
}
이 나오는데 이글 바로 밑에 다음을 붙혀 넣으시면 됩니다..
// 한글이름인 그림화일인 경우 날짜로 화일명 변환
preg_match('/\.([^.]+)$/', $s_file_name1, $match1);
$gfile_name1_type=$match1[1];
if((eregi("\jpg",$gfile_name1_type))||(eregi("\gif",$gfile_name1_type))||(eregi("\bmp",$gfile_name1_type))||(eregi("\png",$gfile_name1_type))) {
if(eregi("\jpg",$gfile_name1_type)) $temp_c1="jpg";
elseif(eregi("\gif",$gfile_name1_type)) $temp_c1="gif";
elseif(eregi("\bmp",$gfile_name1_type)) $temp_c1="bmp";
else $temp_c1="png";
if(eregi("'",$s_file_name1)) {
$temp_name1=$user_id_r."_".time()."_01";
$s_file_name1 = "$temp_name1.$temp_c1";
}
else {
for($i2=0;$i2<strlen($s_file_name1);$i2++)
{
if(ord($s_file_name1[$i2])>0x80)
{
$temp_name1=$user_id_r."_".time()."_01";
$s_file_name1 = "$temp_name1.$temp_c1";
break;
}
}
}
}
또, 조금 아래에...
$file2=eregi_replace("\\\\","\\",$file2);
$s_file_name2=str_replace(" ","_",$s_file_name2);
$s_file_name2=str_replace("-","_",$s_file_name2);
// 디렉토리를 검사함
if(!is_dir("data/".$id)) {
mkdir("data/".$id,0777);
@chmod("data/".$id,0706);
}
이 나오는데.. 그 바로 아래에... 다음을 붙혀 넣으시면 됩니다.
// 한글이름인 그림화일인 경우 날짜로 화일명 변환
preg_match('/\.([^.]+)$/', $s_file_name2, $match2);
$gfile_name2_type=$match2[1];
if((eregi("\jpg",$gfile_name2_type))||(eregi("\gif",$gfile_name2_type))||(eregi("\bmp",$gfile_name2_type))||(eregi("\png",$gfile_name2_type))) {
if(eregi("\jpg",$gfile_name2_type)) $temp_c2="jpg";
elseif(eregi("\gif",$gfile_name2_type)) $temp_c2="gif";
elseif(eregi("\bmp",$gfile_name2_type)) $temp_c2="bmp";
else $temp_c2="png";
if(eregi("'",$s_file_name2)) {
$temp_name2=$user_id_r."_".time()."_02";
$s_file_name2 = "$temp_name2.$temp_c2";
}
else {
for($i2=0;$i2<strlen($s_file_name2);$i2++)
{
if(ord($s_file_name2[$i2])>0x80)
{
$temp_name2=$user_id_r."_".time()."_02";
$s_file_name2 = "$temp_name2.$temp_c2";
break;
}
}
}
}
여기까지....------------------------------------
또한,, 한글파일이름이던, 영문 파일이름이던 모든 그림파일을 모두 숫자 형식으로 변경하고 싶으시면
위의 추가 팁에서 아래처럼 몇줄을 삭제하시면 됩니다.. file_name2 부분도 마찬가지로 수정..
// 한글이름인 그림화일인 경우 날짜로 화일명 변환
preg_match('/\.([^.]+)$/', $s_file_name1, $match1);
$gfile_name1_type=$match1[1];
if((eregi("\jpg",$gfile_name1_type))||(eregi("\gif",$gfile_name1_type))||(eregi("\bmp",$gfile_name1_type))||(eregi("\png",$gfile_name1_type))) {
if(eregi("\jpg",$gfile_name1_type)) $temp_c1="jpg";
elseif(eregi("\gif",$gfile_name1_type)) $temp_c1="gif";
elseif(eregi("\bmp",$gfile_name1_type)) $temp_c1="bmp";
else $temp_c1="png";
// if(eregi("'",$s_file_name1)) {
// $temp_name1=$user_id_r."_".time()."_01";
// $s_file_name1 = "$temp_name1.$temp_c1";
// }
// else {
// for($i2=0;$i2<strlen($s_file_name1);$i2++)
// {
// if(ord($s_file_name1[$i2])>0x80)
// {
$temp_name1=$user_id_r."_".time()."_01";
$s_file_name1 = "$temp_name1.$temp_c1";
// break;
// }
// }
// }
}
--------------------------------------------
또, 날짜표시를 리눅스형식이 아닌 달력형식으로 변경을 원하시면...
위의 글에서 아래 내용을 찾아서 변경해주시면 됩니다..물론 file_name2도 마찬가지 형식으로 변환해야겠죠..
$temp_name1=$user_id."_".time()."_01"; -> 이부분을 아래와 같이 변경...
$temp_name1=$user_id."_".date("Ymd_His")."_01";
초단위까지 표시하지 않으면,, 파일이름이 중복될 수가 있어서.....
-------------------------------------------
또 마지막으로... 화일이름 앞에 본인의 사이트 이름을 남기고 싶으신 분들은.
$temp_name1=$user_id."_".time()."_01"; -> 이부분을 아래와 같이 변경...
$temp_name1="site_name_".$user_id."_".time()."_01";
한글 파일이름을 변경해 주는 기능인데.. 사이트 이름을 한글로 넣으시는 분들은 없으시겠죠..^^;;;
노파심에 한가지 더... 사이트 이름에 "http://" "/" "\" "빈칸" 등의 특수문자는 빼고 넣으셔야 합니다.-.-;;;
-------------------------------------------
여기 까지 입니다..
제가 초보라.. 손 가는데로 수정을 하였습니다.. 각종 테스트는 모두 해보았습니다만,,.좀더 간략화된 구문이나, 문제점을 아시는 분의 조언 부탁드립니다... 그럼..
테스트를 마친 파일이름과 그 결과는 다음과 같습니다..
abc abc.jpg -> abc_abc.jpg
abc 한글_01.jpg -> user_id_날짜_01 (그림1에 올릴경우)
한글.abc.한글.jpg -> user_id_날짜_02 (그림2에 올릴경우)
abc.abc_abc.jpg -> 변화없음
한글_abc.jpg -> user_id_날짜_01 (그림1에 올릴경우)
한글.zip -> 변화없음
abc'abc.jpg -> user_id_날짜_01 (그림1에 올릴경우)
한글.jpg.zip -> 변화없음
p.s 제 홈페이지는 제가 관리를 하지만, 동호회 홈이라, 테스트 용도의 이용은 삼가해주시길 부탁드립니다.. 그럼...
2004. 11.22 19:50분 첫 등록
태권동자님과 유메미루님이 올리신 팁에서 2가지 문제를 수정하여 등록
영문 파일이름중 띄어쓰기가 되어 있는 파일일 경우 에러 수정. 예:test ts.jpg
파일명 중간에 마침표가 있을 경우 전체 파일명이 수정되지 않는 현상수정. 예:여행.사진.나.jpg
2004. 11.25. 15:10분 1차 수정
다른 문제점이 발견됨..유닉스 동호회에 이미 여러 문제를 고쳐놓은 소스가 있어.. 얻어서 제로보드에 맞게 수정하여 등록
그림화일 이외의 한글파일 (예: 그림묶음.zip) 의 경우 확장자가 누락되는 현상수정..예:그림묶음.zip
" ' " 문자가 포함된 그림파일일 경우 인식이 되지 않는 현상수정..예: abc'abc_01.jpg
2004. 11.26 11:50분 2차 수정
user_id 가 관리자 이외에는 들어가지 않는 현상수정..
2004. 11.26 15:05분 3차 수정
파일이름 중간에 그림확장자가 들어간 한글명인 일반 파일일 경우.. 강제로 이름이 변경되는 현상 수정 예:그림묶음.jpg.zip
기본 소스를 제공해주신 유닉스 동호회 insulaun 님께 감사드립니다.
---------------------------------------------------------------
일단 기본적으로 화일의 중복을 최대한 막기위해 회원일 경우 화일이름앞에 글쓴이의 아이디가 들어가도록 하였고, 비회원일 경우 0~999 까지의 숫자가 랜덤하게 들어가도록 하였습니다.
비회원 몇십명이 한 게시판에서 완전히 동일한 시간에 글을 작성하여도 파일이름이 중복되는 것을 막기 위함입니다..
--------------------------------------------------------------
수정할 내용은 다음과 같습니다..
write_ok.php 에서 아래 부분을 찾아서 밑에 글을 추가해 주시고,,
/***************************************************************************
* 업로드가 있을때
**************************************************************************/
if($HTTP_POST_FILES[file1]) {
$file1 = $HTTP_POST_FILES[file1][tmp_name];
$file1_name = $HTTP_POST_FILES[file1][name];
$file1_size = $HTTP_POST_FILES[file1][size];
$file1_type = $HTTP_POST_FILES[file1][type];
}
if($HTTP_POST_FILES[file2]) {
$file2 = $HTTP_POST_FILES[file2][tmp_name];
$file2_name = $HTTP_POST_FILES[file2][name];
$file2_size = $HTTP_POST_FILES[file2][size];
$file2_type = $HTTP_POST_FILES[file2][type];
}
------------ 윗 글 아래에 다음을 추가
//추가 한글그림화일 이름 변경...
if($member[no]!=0) {
$user_no=$member[no];
$user_id_c=mysql_fetch_array(mysql_query("select user_id from $member_table where no='$user_no'"));
$user_id_r=$user_id_c[0];
}
else {
srand(time()); // 중복 방지를 위한 램덤출력.
$ran_c = (rand()%999); //0~999 숫자중 랜덤 출력
$user_id_r=$ran_c;
}
-----------여기까지...-------
같은 wriite_ok.php 파일에서 내려가다 보면
$file1=eregi_replace("\\\\","\\",$file1);
$s_file_name1=str_replace(" ","_",$s_file_name1);
$s_file_name1=str_replace("-","_",$s_file_name1);
// 디렉토리를 검사함
if(!is_dir("data/".$id)) {
@mkdir("data/".$id,0777);
@chmod("data/".$id,0706);
}
이 나오는데 이글 바로 밑에 다음을 붙혀 넣으시면 됩니다..
// 한글이름인 그림화일인 경우 날짜로 화일명 변환
preg_match('/\.([^.]+)$/', $s_file_name1, $match1);
$gfile_name1_type=$match1[1];
if((eregi("\jpg",$gfile_name1_type))||(eregi("\gif",$gfile_name1_type))||(eregi("\bmp",$gfile_name1_type))||(eregi("\png",$gfile_name1_type))) {
if(eregi("\jpg",$gfile_name1_type)) $temp_c1="jpg";
elseif(eregi("\gif",$gfile_name1_type)) $temp_c1="gif";
elseif(eregi("\bmp",$gfile_name1_type)) $temp_c1="bmp";
else $temp_c1="png";
if(eregi("'",$s_file_name1)) {
$temp_name1=$user_id_r."_".time()."_01";
$s_file_name1 = "$temp_name1.$temp_c1";
}
else {
for($i2=0;$i2<strlen($s_file_name1);$i2++)
{
if(ord($s_file_name1[$i2])>0x80)
{
$temp_name1=$user_id_r."_".time()."_01";
$s_file_name1 = "$temp_name1.$temp_c1";
break;
}
}
}
}
또, 조금 아래에...
$file2=eregi_replace("\\\\","\\",$file2);
$s_file_name2=str_replace(" ","_",$s_file_name2);
$s_file_name2=str_replace("-","_",$s_file_name2);
// 디렉토리를 검사함
if(!is_dir("data/".$id)) {
mkdir("data/".$id,0777);
@chmod("data/".$id,0706);
}
이 나오는데.. 그 바로 아래에... 다음을 붙혀 넣으시면 됩니다.
// 한글이름인 그림화일인 경우 날짜로 화일명 변환
preg_match('/\.([^.]+)$/', $s_file_name2, $match2);
$gfile_name2_type=$match2[1];
if((eregi("\jpg",$gfile_name2_type))||(eregi("\gif",$gfile_name2_type))||(eregi("\bmp",$gfile_name2_type))||(eregi("\png",$gfile_name2_type))) {
if(eregi("\jpg",$gfile_name2_type)) $temp_c2="jpg";
elseif(eregi("\gif",$gfile_name2_type)) $temp_c2="gif";
elseif(eregi("\bmp",$gfile_name2_type)) $temp_c2="bmp";
else $temp_c2="png";
if(eregi("'",$s_file_name2)) {
$temp_name2=$user_id_r."_".time()."_02";
$s_file_name2 = "$temp_name2.$temp_c2";
}
else {
for($i2=0;$i2<strlen($s_file_name2);$i2++)
{
if(ord($s_file_name2[$i2])>0x80)
{
$temp_name2=$user_id_r."_".time()."_02";
$s_file_name2 = "$temp_name2.$temp_c2";
break;
}
}
}
}
여기까지....------------------------------------
또한,, 한글파일이름이던, 영문 파일이름이던 모든 그림파일을 모두 숫자 형식으로 변경하고 싶으시면
위의 추가 팁에서 아래처럼 몇줄을 삭제하시면 됩니다.. file_name2 부분도 마찬가지로 수정..
// 한글이름인 그림화일인 경우 날짜로 화일명 변환
preg_match('/\.([^.]+)$/', $s_file_name1, $match1);
$gfile_name1_type=$match1[1];
if((eregi("\jpg",$gfile_name1_type))||(eregi("\gif",$gfile_name1_type))||(eregi("\bmp",$gfile_name1_type))||(eregi("\png",$gfile_name1_type))) {
if(eregi("\jpg",$gfile_name1_type)) $temp_c1="jpg";
elseif(eregi("\gif",$gfile_name1_type)) $temp_c1="gif";
elseif(eregi("\bmp",$gfile_name1_type)) $temp_c1="bmp";
else $temp_c1="png";
// if(eregi("'",$s_file_name1)) {
// $temp_name1=$user_id_r."_".time()."_01";
// $s_file_name1 = "$temp_name1.$temp_c1";
// }
// else {
// for($i2=0;$i2<strlen($s_file_name1);$i2++)
// {
// if(ord($s_file_name1[$i2])>0x80)
// {
$temp_name1=$user_id_r."_".time()."_01";
$s_file_name1 = "$temp_name1.$temp_c1";
// break;
// }
// }
// }
}
--------------------------------------------
또, 날짜표시를 리눅스형식이 아닌 달력형식으로 변경을 원하시면...
위의 글에서 아래 내용을 찾아서 변경해주시면 됩니다..물론 file_name2도 마찬가지 형식으로 변환해야겠죠..
$temp_name1=$user_id."_".time()."_01"; -> 이부분을 아래와 같이 변경...
$temp_name1=$user_id."_".date("Ymd_His")."_01";
초단위까지 표시하지 않으면,, 파일이름이 중복될 수가 있어서.....
-------------------------------------------
또 마지막으로... 화일이름 앞에 본인의 사이트 이름을 남기고 싶으신 분들은.
$temp_name1=$user_id."_".time()."_01"; -> 이부분을 아래와 같이 변경...
$temp_name1="site_name_".$user_id."_".time()."_01";
한글 파일이름을 변경해 주는 기능인데.. 사이트 이름을 한글로 넣으시는 분들은 없으시겠죠..^^;;;
노파심에 한가지 더... 사이트 이름에 "http://" "/" "\" "빈칸" 등의 특수문자는 빼고 넣으셔야 합니다.-.-;;;
-------------------------------------------
여기 까지 입니다..
제가 초보라.. 손 가는데로 수정을 하였습니다.. 각종 테스트는 모두 해보았습니다만,,.좀더 간략화된 구문이나, 문제점을 아시는 분의 조언 부탁드립니다... 그럼..
테스트를 마친 파일이름과 그 결과는 다음과 같습니다..
abc abc.jpg -> abc_abc.jpg
abc 한글_01.jpg -> user_id_날짜_01 (그림1에 올릴경우)
한글.abc.한글.jpg -> user_id_날짜_02 (그림2에 올릴경우)
abc.abc_abc.jpg -> 변화없음
한글_abc.jpg -> user_id_날짜_01 (그림1에 올릴경우)
한글.zip -> 변화없음
abc'abc.jpg -> user_id_날짜_01 (그림1에 올릴경우)
한글.jpg.zip -> 변화없음
p.s 제 홈페이지는 제가 관리를 하지만, 동호회 홈이라, 테스트 용도의 이용은 삼가해주시길 부탁드립니다.. 그럼...
"쇼핑몰·홈페이지·오픈마켓
블로그·페이스북·이메일 등의 각종 마케팅 글쓰기, 각종 광고, 영업, 판매, 제안서, 전단지 반응율 3배×10배 이상 높이는 마법의 8단계 공식" |
☞자세히보기 |
|
|