다국어 언어 게시판에서 파일 중복 업로드 방지 정보
다국어 언어 게시판에서 파일 중복 업로드 방지
본문
다국어 언어 게시판을 만들었습니다.
영어와 한국어 모두 같은 게시판 테이블을 씁니다.
그런데 이게 문제점이 영어 게시글에서 첨부파일을 올리고,
한국에 게시글에서 또 해당하는 첨부파일을 올리면,
data/file/게시판 폴더안에 중복된 파일이 두개가 됩니다.
board_file 테이블에 만약 새로 업로드 하고자 하는 파일과 bf_soure, bf_filesize, bf_width, bf_height 등이 모두 같은 파일이 이미 존재하면
그 이미 존재하는 row 의 값을 간단하게 새로 업데이트 하고자 하는 row 에 복사 하는 식으로
하고 싶습니다.
write_update.php 를 좀 손보면 될거서 같은데, 머리가 터질것 같네요...ㅜ.ㅜ
도와주세요.
감사합니다.
영어와 한국어 모두 같은 게시판 테이블을 씁니다.
그런데 이게 문제점이 영어 게시글에서 첨부파일을 올리고,
한국에 게시글에서 또 해당하는 첨부파일을 올리면,
data/file/게시판 폴더안에 중복된 파일이 두개가 됩니다.
board_file 테이블에 만약 새로 업로드 하고자 하는 파일과 bf_soure, bf_filesize, bf_width, bf_height 등이 모두 같은 파일이 이미 존재하면
그 이미 존재하는 row 의 값을 간단하게 새로 업데이트 하고자 하는 row 에 복사 하는 식으로
하고 싶습니다.
write_update.php 를 좀 손보면 될거서 같은데, 머리가 터질것 같네요...ㅜ.ㅜ
도와주세요.
감사합니다.
댓글 전체
간단하게 할수 있는 방법은 영문/한글 스킨이 다르다면
영문 스킨 write.skin.php 에 hidden input 을 하나 추가합니다.
<input type='hidden' name='engboard' value='1' >
영문보드에서 글쓰면 write_update.php 에 $_POST['engboard'] = '1'이 됩니다.
write_update.php 파일 가변파일 업로드 부분 소스중 (200번째줄 근처)
$upload[$i][file] = abs(ip2long($_SERVER[REMOTE_ADDR])).'_'.substr($shuffle,0,8).'_'.str_replace('%', '', urlencode($filename));
위와 같이 첨부파일 이름을 생성해 주는데 이부분을 $_POST['engboard'] 값이 있다면 다르게 생성해 주도록 수정해 줍니다.
if($_POST['engboard']){
$upload[$i][file] = 'engboard_'.abs(ip2long($_SERVER[REMOTE_ADDR])).'_'.substr($shuffle,0,8).'_'.str_replace('%', '', urlencode($filename));
}else{
//원본소스
$upload[$i][file] = abs(ip2long($_SERVER[REMOTE_ADDR])).'_'.substr($shuffle,0,8).'_'.str_replace('%', '', urlencode($filename));
}
위처럼 수정하면 한글로 게시물 작성시는 그대로 첨부파일이 올라가고
영문보드로 게시물 작성하면 첨부파일 앞에 engboard_ 가 붙습니다.
영문 스킨 write.skin.php 에 hidden input 을 하나 추가합니다.
<input type='hidden' name='engboard' value='1' >
영문보드에서 글쓰면 write_update.php 에 $_POST['engboard'] = '1'이 됩니다.
write_update.php 파일 가변파일 업로드 부분 소스중 (200번째줄 근처)
$upload[$i][file] = abs(ip2long($_SERVER[REMOTE_ADDR])).'_'.substr($shuffle,0,8).'_'.str_replace('%', '', urlencode($filename));
위와 같이 첨부파일 이름을 생성해 주는데 이부분을 $_POST['engboard'] 값이 있다면 다르게 생성해 주도록 수정해 줍니다.
if($_POST['engboard']){
$upload[$i][file] = 'engboard_'.abs(ip2long($_SERVER[REMOTE_ADDR])).'_'.substr($shuffle,0,8).'_'.str_replace('%', '', urlencode($filename));
}else{
//원본소스
$upload[$i][file] = abs(ip2long($_SERVER[REMOTE_ADDR])).'_'.substr($shuffle,0,8).'_'.str_replace('%', '', urlencode($filename));
}
위처럼 수정하면 한글로 게시물 작성시는 그대로 첨부파일이 올라가고
영문보드로 게시물 작성하면 첨부파일 앞에 engboard_ 가 붙습니다.
답변 감사합니다 진서기님.
죄송합니다. 제가 원하는 것을 명확하게 하지 못해서 잘못 이해하신 듯 싶습니다..
위 방법은 중복 업로드를 하기 위한 방법이 아닌가 싶고요,
제가 원하는거는 a.jpg 라는 파일이 있을때,
영어 게시판에서 업로드를 하면
23492349823_a.jpg 라는 파일이 올라갑니다.
한글 게시판에서 똑같은 업로드를 하면
45830495893_a.jpg 라는 파일로 올라갑니다.
그런데 결국 두개의 파일이 같은거라 디스크 공간만 차지하기 때문에,
board_file 테이블에서 업로드 하기 전에 이미 존재하는 파일이면
영어 게시판에서 올린 파일의 정보를
한글 게시판에서 올렸을 시 파일 업로드는 하지 않고 해당 row 를 영문 게시글의 bo_file row 로 부터 카피합니다.
예를들자면
영문 게시판에서
a.jpg 를 업로드 하면
data/file/게시판/23492349823_a.jpg
로 업로드 됩니다.
한글 게시판에서 똑같은 파일인 a.jpg 를 업로드 하면
파일을 업로드 해서 data/file/게시판/45830495893_a.jpg 가 되는게 아니라
bo_file 테이블에서 해당 파일이 있나 검사 후, (이 경우에는 이미 있으므로) 그 wr_id row 의 정보를
카피 해 와서
한글 게시물에서도 23492349823_a.jpg 을 불러오는겁니다.
가능할까요?
죄송합니다. 제가 원하는 것을 명확하게 하지 못해서 잘못 이해하신 듯 싶습니다..
위 방법은 중복 업로드를 하기 위한 방법이 아닌가 싶고요,
제가 원하는거는 a.jpg 라는 파일이 있을때,
영어 게시판에서 업로드를 하면
23492349823_a.jpg 라는 파일이 올라갑니다.
한글 게시판에서 똑같은 업로드를 하면
45830495893_a.jpg 라는 파일로 올라갑니다.
그런데 결국 두개의 파일이 같은거라 디스크 공간만 차지하기 때문에,
board_file 테이블에서 업로드 하기 전에 이미 존재하는 파일이면
영어 게시판에서 올린 파일의 정보를
한글 게시판에서 올렸을 시 파일 업로드는 하지 않고 해당 row 를 영문 게시글의 bo_file row 로 부터 카피합니다.
예를들자면
영문 게시판에서
a.jpg 를 업로드 하면
data/file/게시판/23492349823_a.jpg
로 업로드 됩니다.
한글 게시판에서 똑같은 파일인 a.jpg 를 업로드 하면
파일을 업로드 해서 data/file/게시판/45830495893_a.jpg 가 되는게 아니라
bo_file 테이블에서 해당 파일이 있나 검사 후, (이 경우에는 이미 있으므로) 그 wr_id row 의 정보를
카피 해 와서
한글 게시물에서도 23492349823_a.jpg 을 불러오는겁니다.
가능할까요?
//첨부된 파일 검사코드 삽입
//식사 하러 가야되서 생략합니다. ㅠㅠ
//select count(*) from g4_board_file where bf_source='첨부된파일명' and bf_width='너비' and bf_height='높이'; 대충 이런식으로;;
if(같은파일이없으면){
// 업로드가 안된다면 에러메세지 출력하고 죽어버립니다.
$error_code = move_uploaded_file($tmp_file, $dest_file) or die($_FILES[bf_file][error][$i]);
// 올라간 파일의 퍼미션을 변경합니다.
chmod($dest_file, 0606);
//$upload[$i][image] = @getimagesize($dest_file);
}else{
//같은 파일이 있다면 실행될 코드
}
444 라인쯤에 가변파일 DB에 입력 부분
else
{
$sql = " insert into $g4[board_file_table]
set bo_table = '$bo_table',
wr_id = '$wr_id',
bf_no = '$i',
bf_source = '{$upload[$i][source]}',
bf_file = '{$upload[$i][file]}',
bf_content = '{$bf_content[$i]}',
bf_download = 0,
bf_filesize = '{$upload[$i][filesize]}',
bf_width = '{$upload[$i][image][0]}',
bf_height = '{$upload[$i][image][1]}',
bf_type = '{$upload[$i][image][2]}',
bf_datetime = '$g4[time_ymdhis]' ";
sql_query($sql);
}
윗 부분에도 if문을 추가해서
else
{
if(같은파일있으면){
//실행될SQL
//같은 파일 있는지 sql을 이곳에 미리 삽입 또는 윗부분에 삽입해서 아래 sql에 입력해 주세요
$slq= 'insert ~~~~';
}else{
$sql = " insert into $g4[board_file_table]
set bo_table = '$bo_table',
wr_id = '$wr_id',
bf_no = '$i',
bf_source = '{$upload[$i][source]}',
bf_file = '{$upload[$i][file]}',
bf_content = '{$bf_content[$i]}',
bf_download = 0,
bf_filesize = '{$upload[$i][filesize]}',
bf_width = '{$upload[$i][image][0]}',
bf_height = '{$upload[$i][image][1]}',
bf_type = '{$upload[$i][image][2]}',
bf_datetime = '$g4[time_ymdhis]' ";
sql_query($sql);
}//같은파일있으면if 끝
}
삭제등은 생각 안해봤습니다.
완성코드는 힘들것 같고 아래 답변해주실 분이 완성을 ;;
아니면 안되는 부분 다시 질문주세요
//식사 하러 가야되서 생략합니다. ㅠㅠ
//select count(*) from g4_board_file where bf_source='첨부된파일명' and bf_width='너비' and bf_height='높이'; 대충 이런식으로;;
if(같은파일이없으면){
// 업로드가 안된다면 에러메세지 출력하고 죽어버립니다.
$error_code = move_uploaded_file($tmp_file, $dest_file) or die($_FILES[bf_file][error][$i]);
// 올라간 파일의 퍼미션을 변경합니다.
chmod($dest_file, 0606);
//$upload[$i][image] = @getimagesize($dest_file);
}else{
//같은 파일이 있다면 실행될 코드
}
444 라인쯤에 가변파일 DB에 입력 부분
else
{
$sql = " insert into $g4[board_file_table]
set bo_table = '$bo_table',
wr_id = '$wr_id',
bf_no = '$i',
bf_source = '{$upload[$i][source]}',
bf_file = '{$upload[$i][file]}',
bf_content = '{$bf_content[$i]}',
bf_download = 0,
bf_filesize = '{$upload[$i][filesize]}',
bf_width = '{$upload[$i][image][0]}',
bf_height = '{$upload[$i][image][1]}',
bf_type = '{$upload[$i][image][2]}',
bf_datetime = '$g4[time_ymdhis]' ";
sql_query($sql);
}
윗 부분에도 if문을 추가해서
else
{
if(같은파일있으면){
//실행될SQL
//같은 파일 있는지 sql을 이곳에 미리 삽입 또는 윗부분에 삽입해서 아래 sql에 입력해 주세요
$slq= 'insert ~~~~';
}else{
$sql = " insert into $g4[board_file_table]
set bo_table = '$bo_table',
wr_id = '$wr_id',
bf_no = '$i',
bf_source = '{$upload[$i][source]}',
bf_file = '{$upload[$i][file]}',
bf_content = '{$bf_content[$i]}',
bf_download = 0,
bf_filesize = '{$upload[$i][filesize]}',
bf_width = '{$upload[$i][image][0]}',
bf_height = '{$upload[$i][image][1]}',
bf_type = '{$upload[$i][image][2]}',
bf_datetime = '$g4[time_ymdhis]' ";
sql_query($sql);
}//같은파일있으면if 끝
}
삭제등은 생각 안해봤습니다.
완성코드는 힘들것 같고 아래 답변해주실 분이 완성을 ;;
아니면 안되는 부분 다시 질문주세요