동영상 강좌는 유튜브 채널 '웹학교'를 이용하시기 바랍니다.
게시판에 등록된 첨부파일을 다운로드할 때 사용되는 파일입니다.
위치 : /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();
등록된 댓글이 없습니다.