리스트에서 첨부파일 다운로드 적용 관련 문의드립니다. 채택완료
안녕하세요. 리스트에서 첨부파일 다운로드 적용하려고 검색을 해서 아래 소스를 찾았습니다.
<?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> ";</p>
<p> }
}
?>
적용후 첨부파일 클릭했더니, 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++) {
바로 밑에 다음 코드를 추가.</p>
<p>$ss_name = 'ss_view_'.$bo_table.'_'.$list[$i]['wr_id'];
if (!get_session($ss_name)) set_session($ss_name, TRUE);</p>
<p>다운로드 링크를 원하는 위치에 추가
<?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문 다음에 넣으세요
답변에 대한 댓글 4개
$nonce = download_file_nonce_key($bo_table, $list[$i]['wr_id']); //추가
while ($row = sql_fetch_array($result))
{
$down_link = "download.php?bo_table={$bo_table}&wr_id={$list[$i]['wr_id']}&no={$row['bf_no']}&nonce=$nonce"; //마지막 nonce 부분 추가
덕분에 또 하나 해결되었습니다.
$nonce 추가 알려주신 덕분에 리스트에서 첨부파일 다운로드가 가능해졌습니다!
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
그런데, 이미 for문 다음에
$ss_name = 'ss_view_'.$bo_table.'_'.$list[$i]['wr_id'];
if (!get_session($ss_name)) set_session($ss_name, TRUE);
를 넣은 상태인데, 따로 무언가를 해줘야 하는게 있는 건가요?