게시판 목록에서 파일 다운로드 질문입니다. > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

게시판 목록에서 파일 다운로드 질문입니다. 정보

게시판 목록에서 파일 다운로드 질문입니다.

본문

겔러리 게시판을 이용하여 목록에서 첨부파일을 다운받을 수 있도록 작업하였습니다.
첨부파일 1번은 JPG 2번은 AI파일을 다운받게 되고 첨부파일 1번은 무조건 JPG로만 등록되게 하여
다운로드 하게끔 했는데 다운로드를 하려고 하면 잘못된 접근이라고 메세지가 뜹니다.

절대 경로로 view페이지에 들어갔다가 나오면 다운로드가 되는데 그렇지 않은 경우 다운로드가 되지 않습니다.

어느 부분을 손을 봐야하는건지 모르겠네요 ㅠㅠ 이 작업도 소스 짜집기 한거라서 ㅠㅠ

아래 소스 추가 하겠습니다.

파일명 : list.skin.php

<?
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가

include_once("$board_skin_path/skin.lib.php");

if (!function_exists("imagecopyresampled")) alert("GD 2.0.1 이상 버전이 설치되어 있어야 사용할 수 있는 갤러리 게시판 입니다.");

if (!$board[bo_1]) {
    $board[bo_1] = "140";
    $sql = " update $g4[board_table] set bo_1 = '$board[bo_1]', bo_1_subj = '목록 가로 픽셀' where bo_table = '$bo_table' ";
    sql_query($sql);
}

if (!$board[bo_2]) {
    $board[bo_2] = "100";
    $sql = " update $g4[board_table] set bo_2 = '$board[bo_2]', bo_2_subj = '목록 세로 픽셀' where bo_table = '$bo_table' ";
    sql_query($sql);
}

$mod = $board[bo_gallery_cols];
$td_width = (int)(100 / $mod);

// 선택옵션으로 인해 셀합치기가 가변적으로 변함
$colspan = 5;

if ($is_category) $colspan++;
if ($is_checkbox) $colspan++;
if ($is_good) $colspan++;
if ($is_nogood) $colspan++;

// 제목이 두줄로 표시되는 경우 이 코드를 사용해 보세요.
// <nobr style='display:block; overflow:hidden; width:000px;'>제목</nobr>
?>

<style>
<!--
.board_line {background-color:#d9e5f2;}
.board_top { clear:both; display:inline-block; width:100%; }

.board_page { clear:both; text-align:center; margin:3px 0 0 0; }
.board_page a:link { color:#777; }

.board_list .notice { font-weight:normal; font:bold 11px tahoma; color:#2C88B9; }
.board_list .current { font:bold 11px tahoma; color:#E15916; }
.board_list .comment { font-family:Tahoma; font-size:10px; color:#EE5A00; }

.board_search { text-align:center; margin:10px 0 0 0; }
.board_search .stx { height:21px; border:1px solid #9A9A9A; border-right:1px solid #D8D8D8; border-bottom:1px solid #D8D8D8; }
-->
</style>


<!-- 게시판 목록 시작 -->
<table width="<?=$width?>" align="center" cellpadding="0" cellspacing="0"><tr><td>
<!-- 분류 셀렉트 박스, 게시물 몇건, 관리자화면 링크 -->
    <div class="board_top">
       
        <div style="float:right;">
        <span style="font-size:8pt;"><font face="Tahoma" color="#999999">Total. <?=number_format($total_count)?></font></span>
        <? if ($rss_href) { ?><a href='<?=$rss_href?>'><img src='<?=$board_skin_path?>/img/btn_rss.gif' border=0 align=absmiddle></a><?}?>
        <? if ($admin_href) { ?><a href="<?=$admin_href?>"><img src="<?=$board_skin_path?>/img/btn_admin.gif" title="관리자" border="0" align="absmiddle"></a><?}?>
        </div>
    </div>


<!-- 목록 -->
    <form name="fboardlist" method="post">
    <input type='hidden' name='bo_table' value='<?=$bo_table?>'>
    <input type='hidden' name='sfl'  value='<?=$sfl?>'>
    <input type='hidden' name='stx'  value='<?=$stx?>'>
    <input type='hidden' name='spt'  value='<?=$spt?>'>
    <input type='hidden' name='page' value='<?=$page?>'>
    <input type='hidden' name='sw'  value=''>

    <table width=100% cellpadding=0 cellspacing=0>
    <tr><td colspan='<?=$mod?>' height=5></td></tr>
    <tr><td colspan='<?=$mod?>' height=1 bgcolor=#DEE3E7></td></tr>
    <tr>
    <?
    for ($i=0; $i<count($list); $i++) {
        if ($i && $i%$mod==0)
            echo "</tr><tr>";

        $style = "";
//        $subject = "<span $style>{$list[$i][subject]}</span>";

        $comment_cnt = "";
        if ($list[$i][comment_cnt])
          $comment_cnt = " <a href=\"{$list[$i][comment_href]}\"><span style='font-size:10px;'><font face='Tahoma' color='#EE5A00'>{$list[$i][comment_cnt]}</span></a>";

        $list[$i][name] = preg_replace("/<img /", "<img style='display:none;' ", $list[$i][name]);
        $list[$i][name] = preg_replace("/> <span/", "><span", $list[$i][name]);
        $list[$i][name] = preg_replace("/class='member'/", "", $list[$i][name]);

        echo "<td width='{$td_width}%' valign=top style='word-break:break-all; padding:0px;'>";
        echo "<table align=center border=0>";
        echo "<tr><td height=15></td></tr>";
        echo "<tr><td width=140 height=100 align=center valign=middle><div style=' border:0px solid #ccc; background:#fff; padding:4px; font-size:0; line-height:0;'>".makeThumbs($g4[path]."/data/file/$bo_table", $list[$i][file][0][file], $board[bo_1], $board[bo_2], cut_str($list[$i][subject],20))."</div></td></tr>";
        //echo "<tr><td align=center style='font-size:11px; color:#888;'>Date.".$list[$i][datetime2]." / Hit.".$list[$i][wr_hit]."</td></tr>";

echo "<tr><td align=center class=lh>";
        echo "<span style='color=#666666;'>{$list[$i][subject]}</span>";
echo "</td></tr>";

        echo "<tr><td align=center class=lh>";
        if ($is_category) echo "<a href='{$list[$i][ca_name_href]}'>[{$list[$i][ca_name]}]</a> ";

$file_ext_name = strtolower(substr(str_replace(".","",substr($list[$i][file][0][source],-4)),0,3));

if ($file_ext_name=="pdf"||$file_ext_name=="hwp"||$file_ext_name=="doc"||$file_ext_name=="xls"||$file_ext_name=="ppt"||$file_ext_name=="zip"||$file_ext_name=="txt"||$file_ext_name=="jpg"||$file_ext_name=="avi"||$file_ext_name=="psd"||$file_ext_name=="mp3") {
$file_ext = "$board_skin_path" . "/img/icon_" . $file_ext_name . ".gif" ;
} else {
$file_ext = "$board_skin_path" . "/img/icon_file.gif" ;
}










      echo
"<a href=\"javascript:file_download('{$list[$i][file][0][href]}', '{$list[$i][file][0][source]}');\"><span style='font-weight:bold;'>JPG</span></a> &nbsp;&nbsp;|&nbsp;&nbsp;
<a href=\"javascript:file_download('{$list[$i][file][1][href]}', '{$list[$i][file][1][source]}');\"><span style='font-weight:bold;'>AI</span></a>";
        //echo " " . $list[$i][icon_new];
        //echo " " . $list[$i][icon_file];
        //echo " " . $list[$i][icon_link];
        //echo " " . $list[$i][icon_hot];
        //echo " " . $list[$i][icon_secret];
        echo "</td></tr>";
        if ($is_checkbox) echo "<tr><td align=center><input type=checkbox name=chk_wr_id[] value='{$list[$i][wr_id]}'></td></tr>";
        echo "</table></td>\n";
    }

    // 나머지 td
    $cnt = $i%$mod;
    if ($cnt)
        for ($i=$cnt; $i<$mod; $i++)
            echo "<td width='{$td_width}%'>&nbsp;</td>";
    ?>
    </tr>

    <? if (count($list) == 0) { echo "<tr><td colspan='$mod' height=100 align=center>게시물이 없습니다.</td></tr>"; } ?>
<tr><td colspan='<?=$mod?>' height=15></td></tr>
    <tr><td colspan=<?=$mod?> bgcolor=#DEE3E7 height=1>
    </table>
    </form>

<!-- 버튼 링크 -->
<div style="margin:10px 0 0 0;">
    <div style="float:left;">
    <? if ($list_href) { ?>
    <a href="<?=$list_href?>"><img src="<?=$board_skin_path?>/img/btn_list.gif" align="absmiddle" border='0'></a>
    <? } ?>
    <? if ($is_checkbox) { ?>
    <a href="javascript:select_delete();"><img src="<?=$board_skin_path?>/img/btn_select_delete.gif" align="absmiddle" border='0'></a>
    <a href="javascript:select_copy('copy');"><img src="<?=$board_skin_path?>/img/btn_select_copy.gif" align="absmiddle" border='0'></a>
    <a href="javascript:select_copy('move');"><img src="<?=$board_skin_path?>/img/btn_select_move.gif" align="absmiddle" border='0'></a>
    <? } ?>
    </div>
    <div style="float:right;">
    <? if ($write_href) { ?><a href="<?=$write_href?>"><img src="<?=$board_skin_path?>/img/btn_write.gif" border='0'></a><? } ?>
    </div>
</div>

<!-- 페이지 -->
<table width="100%" cellspacing="0" cellpadding="0">
<tr>
    <td width="100%"  height="36" align="center" valign="top">
        <? if ($prev_part_href) { echo "<a href='$prev_part_href'><img src='$board_skin_path/img/btn_search_prev.gif' border=0 align=absmiddle title='이전검색'></a>"; } ?>
        <?
        // 기본으로 넘어오는 페이지를 아래와 같이 변환하여 이미지로도 출력할 수 있습니다.
        //echo $write_pages;
        $write_pages = str_replace("처음", "<img src='$board_skin_path/img/page_begin.gif' border='0' align='absmiddle' title='처음'>", $write_pages);
        $write_pages = str_replace("이전", "<img src='$board_skin_path/img/page_prev.gif' border='0' align='absmiddle' title='이전'>", $write_pages);
        $write_pages = str_replace("다음", "<img src='$board_skin_path/img/page_next.gif' border='0' align='absmiddle' title='다음'>", $write_pages);
        $write_pages = str_replace("맨끝", "<img src='$board_skin_path/img/page_end.gif' border='0' align='absmiddle' title='맨끝'>", $write_pages);
        $write_pages = preg_replace("/<span>([0-9]*)<\/span>/", "<b><font style=\"font-family:돋움; font-size:9pt; color:#797979\">$1</font></b>", $write_pages);
        $write_pages = preg_replace("/<b>([0-9]*)<\/b>/", "<b><font style=\"font-family:돋움; font-size:9pt; color:orange;\">$1</font></b>", $write_pages);
        ?>
        <?=$write_pages?>
        <? if ($next_part_href) { echo "<a href='$next_part_href'><img src='$board_skin_path/img/btn_search_next.gif' border=0 align=absmiddle title='다음검색'></a>"; } ?>
    </td>
</tr>
</table>

<!-- 검색 -->
<table cellSpacing=1 cellPadding="10" width="100%" bgColor=#dfe4e9 border=0 height="21">
    <tr>
        <td align=middle bgColor=#f6f9fb>
        <form name="fsearch" method="get">
        <input type="hidden" name="bo_table" value="<?=$bo_table?>">
        <input type="hidden" name="sca"      value="<?=$sca?>">
        <select name="sfl" class="sel">
            <option value="wr_subject">제목</option>
            <option value="wr_content">내용</option>
            <option value="wr_subject||wr_content">제목+내용</option>
            <option value="mb_id,1">아이디</option>
            <option value="mb_id,0">아이디(코)</option>
            <option value="wr_name,1">글쓴이</option>
            <option value="wr_name,0">글쓴이(코)</option>
        </select>
        <input name="stx" class="stx" maxlength="28" itemname="검색어" required value='<?=stripslashes($stx)?>'>
        <input type="image" src="<?=$board_skin_path?>/img/btn_search.gif" border='0' align="absmiddle">
        <input type="radio" name="sop" value="and">AND
        <input type="radio" name="sop" value="or">OR
        </form>
</td>
</tr>
</table>

    </td>
    </tr>
</table>

<script language="JavaScript">
// bbs/download.php 링크방지코드 주석요망!!
function file_download(link, file) {
    <? if ($board[bo_download_point] < 0) { ?>if (confirm("'"+file+"' 파일을 다운로드 하시면 포인트가 차감(<?=number_format($board[bo_download_point])?>점)됩니다.\n\n포인트는 게시물당 한번만 차감되며 다음에 다시 다운로드 하셔도 중복하여 차감하지 않습니다.\n\n그래도 다운로드 하시겠습니까?"))<?}?>
    document.location.href = link;
}
</script>

<script type="text/javascript">
if ('<?=$sca?>') document.fcategory.sca.value = '<?=$sca?>';
if ('<?=$stx?>') {
    document.fsearch.sfl.value = '<?=$sfl?>';

    if ('<?=$sop?>' == 'and')
        document.fsearch.sop[0].checked = true;

    if ('<?=$sop?>' == 'or')
        document.fsearch.sop[1].checked = true;
} else {
    document.fsearch.sop[0].checked = true;
}
</script>

<? if ($is_checkbox) { ?>
<script type="text/javascript">
function all_checked(sw) {
    var f = document.fboardlist;

    for (var i=0; i<f.length; i++) {
        if (f.elements[i].name == "chk_wr_id[]")
            f.elements[i].checked = sw;
    }
}

function check_confirm(str) {
    var f = document.fboardlist;
    var chk_count = 0;

    for (var i=0; i<f.length; i++) {
        if (f.elements[i].name == "chk_wr_id[]" && f.elements[i].checked)
            chk_count++;
    }

    if (!chk_count) {
        alert(str + "할 게시물을 하나 이상 선택하세요.");
        return false;
    }
    return true;
}

// 선택한 게시물 삭제
function select_delete() {
    var f = document.fboardlist;

    str = "삭제";
    if (!check_confirm(str))
        return;

    if (!confirm("선택한 게시물을 정말 "+str+" 하시겠습니까?\n\n한번 "+str+"한 자료는 복구할 수 없습니다"))
        return;

    f.action = "./delete_all.php";
    f.submit();
}

// 선택한 게시물 복사 및 이동
function select_copy(sw) {
    var f = document.fboardlist;

    if (sw == "copy")
        str = "복사";
    else
        str = "이동";
                     
    if (!check_confirm(str))
        return;

    var sub_win = window.open("", "move", "left=50, top=50, width=500, height=550, scrollbars=1");

    f.sw.value = sw;
    f.target = "move";
    f.action = "./move.php";
    f.submit();
}
</script>
<? } ?>
<!-- 게시판 목록 끝 -->

댓글 전체

<? 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);  //추가
답변채택이 완료된 질문이지만 다른 분들이 참고하여 볼 수도 있으므로 답변으로 등록합니다
위 답변대로 하는 것보다 조금 효율적인 방법입니다
다른 방법으로 하는 답변을 다는 이유는 위 방법으로 하면 다운로드 받지않는 게시물까지도
게시물 수 만큼 세션기록을 해야합니다(세션은 화일에 기록하는 것이니 그만큼 비효율적입니다)

스킨폴더에 download.head.skin.php 화일을 만들고 아래 코드를 넣으세요
$ss_name = "ss_view_{$bo_table}_$wr_id";     
if ($bo_table=='적용할 게시판' && !get_session($ss_name)) set_session($ss_name, TRUE);
다른분들께서도 이 답변을 보면 많은 도움이 될듯 하네요.
사노라가노라님이 알려주신데로 해결은 했지만 균이님이 알려주신 방법도 참고하여 적용하여 보겠습니다.
감사합니다.
전체 66,558 |RSS
그누4 질문답변 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT