댓글 목록

게시판 download.php

페이지 정보

작성자 운영자 작성일 17-12-13 12:28 조회 1,409 댓글 0

동영상 강좌는 유튜브 채널 '웹학교'를 이용하시기 바랍니다.

게시판에 등록된 첨부파일을 다운로드할 때 사용되는 파일입니다.


위치 : /bbs


게시판 글보기 스킨화일에 첨부파일이 있으면 이 파일이 링크된 것을 볼 수 있습니다. 일반적으로 이미지파일은 글쓰기할 때 첨부하면 글내용 보기에서 바로 반영이 됩니다. 이미지 외의 파일에 대하여 첨부하면 다운로드할 수 있도록 첨부한 대상파일이 직접 링크되지 않고 이 파일이 링크되어 있습니다.


사용자가 첨부파일을 다운로드하기 위해 클릭을 하면 해당 게시판과 글아이디 정보를 갖고 사용자가 다운로드할 수 있도록 진행이 됩니다.


많은 부분이 다운로드할 수 있는 정당한 권한과 상황인지 확인하는데 할애합니다.


잘못된 접근이거나 권한이 없거나 파일 정보가 잘못되었거나 하는 일을 살펴봅니다.

또한, 회원만 가능한 경우와 다운로드할 때 포인트가 필요한지도 검사합니다.


일반적으로 게시판 글쓰기시 파일이 업로드되는 곳은 아래와 같습니다.

G5_DATA_PATH.'/file/'.$bo_table.'/'.$file['bf_file'];


/data/file/게시판명/업로드파일

입니다.


파일을 다운로드 받게 되면 몇 번 다운로드 받았는지 카운트하게 됩니다.

$sql = " update {$g5['board_file_table']} set bf_download = bf_download + 1 where bo_table = '$bo_table' and wr_id = '$wr_id' and bf_no = '$no' ";
    sql_query($sql);


위에서 파일테이블을 $g5['board_file_table'] 이렇게 표현하고 있는데 그누보드5에서 사용하고 있는 테이블 변수를 확인하려면

/data/dbconfig.php 파일을 열어보면 됩니다.


실제로 다운로드 과정이 일어나는 코드입니다.

if(preg_match("/msie/i", $_SERVER['HTTP_USER_AGENT']) && preg_match("/5\.5/", $_SERVER['HTTP_USER_AGENT'])) {
    header("content-type: doesn/matter");
    header("content-length: ".filesize("$filepath"));
    header("content-disposition: attachment; filename=\"$original\"");
    header("content-transfer-encoding: binary");
} else {
    header("content-type: file/unknown");
    header("content-length: ".filesize("$filepath"));
    header("content-disposition: attachment; filename=\"$original\"");
    header("content-description: php generated data");
}
header("pragma: no-cache");
header("expires: 0");
flush();

$fp = fopen($filepath, 'rb');

// 4.00 대체
// 서버부하를 줄이려면 print 나 echo 또는 while 문을 이용한 방법보다는 이방법이...
//if (!fpassthru($fp)) {
//    fclose($fp);
//}

$download_rate = 10;

while(!feof($fp)) {
    //echo fread($fp, 100*1024);
    /*
    echo fread($fp, 100*1024);
    flush();
    */

    print fread($fp, round($download_rate * 1024));
    flush();
    usleep(1000);
}
fclose ($fp);
flush();



댓글목록 0

등록된 댓글이 없습니다.