리스트에서 첨부파일 다운로드 적용 관련 문의드립니다.
본문
안녕하세요.
리스트에서 첨부파일 다운로드 적용하려고 검색을 해서
아래 소스를 찾았습니다.
<?php
$sql = " select * from $g5[board_file_table] where bo_table = '". $bo_table. "' and wr_id = '". $list[$i]['wr_id'] ."' order by bf_no ";
$result = sql_query($sql);
while ($row = sql_fetch_array($result))
{
$down_link = "download.php?bo_table={$bo_table}&wr_id={$list[$i]['wr_id']}&no={$row['bf_no']}";
$file_source = addslashes($row['bf_source']);
$file_type = preg_replace('/^.*\.([^.]+)$/D', '$1', $file_source);
$file_size = get_filesize($row['bf_filesize']);
if(!in_array($file_type, array('jpg', 'jpeg', 'gif', 'bmp', 'png'))){ //이미지는 제외
echo "<a href=\"".$down_link."\" title=\"".$file_source."\">";
echo "<img src='". $board_skin_url ."/filetype/". $file_type .".gif' border=0 align='absmiddle' alt=\"".$file_source."\">({$file_size})";
echo "</a> ";
}
}
?>
적용후 첨부파일 클릭했더니, Not Found 가 떠서
위 소스중 다운로드 경로 아래처럼 bbs/를 추가해줬습니다.
$down_link = "bbs/download.php?bo_table={$bo_table}&wr_id={$list[$i]['wr_id']}&no={$row['bf_no']}";
이렇게 했더니 링크는 제대로 됐는데,
클릭시
"토큰 유효시간이 지났거나 토큰이 유효하지 않습니다.
브라우저를 새로고침 후 다시 시도해 주세요."
라는 창이 뜨네요.
bbs/download.php
에서
if (function_exists('download_file_nonce_is_valid') && !defined('G5_DOWNLOAD_NONCE_CHECK')){
if(! download_file_nonce_is_valid($nonce, $bo_table, $wr_id)){
alert('토큰 유효시간이 지났거나 토큰이 유효하지 않습니다.\\n브라우저를 새로고침 후 다시 시도해 주세요.', G5_URL);
}
}
이 부분을 삭제하면 리스트에서도 정상적으로 첨부파일이 다운 받아지기는 하는데,
이걸 삭제하면 무슨 문제가 생길지 몰라서 삭제하지는 않았습니다.
계속 검색하다보니 아래 팁을 찾았습니다.
https://gnustudy.com/bbs/board.php?bo_table=skin_board&wr_id=91
for ($i=0; $i<count($list); $i++) {
바로 밑에 다음 코드를 추가.
$ss_name = 'ss_view_'.$bo_table.'_'.$list[$i]['wr_id'];
if (!get_session($ss_name)) set_session($ss_name, TRUE);
다운로드 링크를 원하는 위치에 추가
<?php if ($list[$i]['file'][0]['file']) { ?>
<a href="<?php echo $list[$i]['file'][0]['href']; ?>">[다운로드]</a>
<?php } ?>
이걸 적용하면 아무런 에러 없이 정상적으로 리스트에서 첨부파일이 다운 받아 지긴 하는데,
무조건 파일#1번에 첨부한 파일이 받아지네요.
파일#1에 이미지를 업로드 했다면 이미지 파일이 받아집니다.
맨 처음 소스는 이미지는 안 받아지고,
파일#1에 이미지가 있고, 파일#2에 .zip등 첨부 파일이 있다면,
파일#2가 다운받아 지고요.
혹시
맨 처음 소스 "토큰 유효시간을...." 에러가 안뜨게 할 수 있는 방법이나,
두번째 소스 이미지일 경우 다운로드 안 뜨고,
무조건 파일#1이 아닌 파일#1에 이미지, 파일#2에 zip파일일 경우 파일#2가 뜨게 하는 방법 없을까요?
!-->!-->!-->!-->답변 2
바로 밑에 다음 코드를 추가.
$ss_name = 'ss_view_'.$bo_table.'_'.$list[$i]['wr_id'];
if (!get_session($ss_name)) set_session($ss_name, TRUE);
<---이것만 for문 다음에 넣으세요
1.이 부분을 삭제하면 리스트에서도 정상적으로 첨부파일이 다운 받아지기는 하는데,
이걸 삭제하면 무슨 문제가 생길지 몰라서 삭제하지는 않았습니다.
파일이 특정인에게만 다운받게해야하는게 아니면 삭제해도상관없습니다.
2.
<?php if ($list[$i]['file'][0]['file']) { ?>
<a href="<?php echo $list[$i]['file'][0]['href']; ?>">[다운로드]</a>
<?php } ?>
0 말고 1로 한번 수정해보세요