레벨에 따른 다운로드 제한 소스 좀 봐주세요.

· 2012-11-25 (일) 09:36:39 · 1599 · 9
오류가 나는곳의 주소를 알려주시면 더 빠르고 정확하게 답변 받을 수 있습니다.

오류 주소 :

download.php 수정한 소스입니다.

<?
include_once("./_common.php");

//레벨3이상은 무료다운로드3회 제한소스 시작

if ($member[mb_level] >2) { // 레벨3 이상만 적용
$to_day=date("Y-m-d");
if ($member[mb_1]==$to_day) {
if ($member[mb_2]=='3')
alert("무료다운로드는 하루에 3개로 제한합니다.\\n\\n3회 이후는 일반회원과 동일한 포인트가 적용됩니다.");
else
sql_query(" update g4_member set mb_2 = mb_2+'1' where mb_id = '$member[mb_id]' ");
}else{
sql_query(" update g4_member set mb_1 = '$to_day', mb_2='1' where mb_id = '$member[mb_id]' ");
}
}

//레벨3이상은 무료다운로드3회 제한소스 끝

$no = (int)$no;
@include_once("$board_skin_path/download.head.skin.php");

// 쿠키에 저장된 ID값과 넘어온 ID값을 비교하여 같지 않을 경우 오류 발생
// 다른곳에서 링크 거는것을 방지하기 위한 코드
if (!get_session("ss_view_{$bo_table}_{$wr_id}"))
alert("잘못된 접근입니다.");

$sql = " select bf_source, bf_file from $g4[board_file_table] where bo_table = '$bo_table' and wr_id = '$wr_id' and bf_no = '$no' ";
$file = sql_fetch($sql);
if (!$file[bf_file])
alert_close("파일 정보가 존재하지 않습니다.");

if ($member[mb_level] < $board[bo_download_level]) {
$alert_msg = "다운로드 권한이 없습니다.";
if ($member[mb_id])
alert($alert_msg);
else
alert($alert_msg . "\\n\\n회원이시라면 로그인 후 이용해 보십시오.", "./login.php?wr_id=$wr_id&$qstr&url=".urlencode("$g4[bbs_path]/board.php?bo_table=$bo_table&wr_id=$wr_id"));
}

$filepath = "$g4[path]/data/file/$bo_table/$file[bf_file]";
$filepath = addslashes($filepath);
if (!is_file($filepath) || !file_exists($filepath))
alert("파일이 존재하지 않습니다.");

// 사용자 코드 실행
@include_once("$board_skin_path/download.skin.php");

// 이미 다운로드 받은 파일인지를 검사한 후 게시물당 한번만 포인트를 차감하도록 수정
$ss_name = "ss_down_{$bo_table}_{$wr_id}";
$ss_name .= "_{$no}";
if (!get_session($ss_name))
{
// 자신의 글이라면 통과
// 관리자인 경우 통과
// 3레벨 이상 통과
if (($write[mb_id] && $write[mb_id] == $member[mb_id]) || $is_admin);
if($member[mb_level] > 2);
else if ($board[bo_download_level] > 1) // 회원이상 다운로드가 가능하다면
{
// 다운로드 포인트가 음수이고 회원의 포인트가 0 이거나 작다면
if ($member[mb_point] + $board[bo_download_point] < 0)
alert("보유하신 포인트(".number_format($member[mb_point]).")가 없거나 모자라서 다운로드(".number_format($board[bo_download_point]).")가 불가합니다.\\n\\n포인트를 적립하신 후 다시 다운로드 해 주십시오.");

// 게시물당 한번만 차감하도록 수정
insert_point($member[mb_id], $board[bo_download_point], "$board[bo_subject] $wr_id 파일 다운로드", $bo_table, $wr_id . '|' . $no, "다운로드");
}

// 다운로드 카운트 증가
$sql = " update $g4[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);

set_session($ss_name, TRUE);
}

$g4[title] = "$group[gr_subject] > $board[bo_subject] > " . conv_subject($write[wr_subject], 255) . " > 다운로드";

if (preg_match("/^utf/i", $g4[charset]))
$original = urlencode($file[bf_source]);
else
$original = $file[bf_source];

@include_once("$board_skin_path/download.tail.skin.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

위와처럼 회수제한 소스를 걸었는데,
무료 다운로드 3회 이후에는 레벨2의 회원처럼
다운로드 포인트를 사용하여 다운로드가 가능하게 하려고 합니다.
어디를 손을 봐야 할 지 모르겠네요.
|

댓글 9개

그런경우라면 다운을 3회를 했다는것을 구분하기위해 확장필드를 쓰는게 좋을것 같습니다.
무료다운을 1회했다면 mb_1 필드에 1을더하고 다운받을때마다 이필드를 검사한 후 3회가 넘으면 차단하는거죠 ㅇㅂㅇ

sql컨트롤을쓰시면될겁니다.
2012-11-25 (일) 13:57:07
도치즈님 ....
좀더 자세히 설명해 주실수는 없을까요?
제 실력이 너무 허접인지라 구체적인 내용이 필요할것 같네요
아.. 죄송합니다 mb_1, mb_2 을 벌써 쓰고있네요;;
mb_3 필드를 제한필드로 쓰고요

sql_query("update $g4[member_table] set mb_3 = mb_3 + 1 where mb_id = '$member[mb_id]'");

로하시면되겠네요 ㅎ
<?
include_once("./_common.php");

//레벨3이상은 무료다운로드3회 제한소스 시작

$down_count = 1;
if ($member[mb_level] >2) { // 레벨3 이상만 적용
$to_day=date("Y-m-d");
if ($member[mb_1]==$to_day) {
sql_query(" update g4_member set mb_2 = mb_2+'1' where mb_id = '$member[mb_id]' "); //상단삭제<- 수정부분
}else{
sql_query(" update g4_member set mb_1 = '$to_day', mb_2='1' where mb_id = '$member[mb_id]' ");
$member[mb_2] = 1;//추가
}
}

//레벨3이상은 무료다운로드3회 제한소스 끝

$no = (int)$no;
@include_once("$board_skin_path/download.head.skin.php");

// 쿠키에 저장된 ID값과 넘어온 ID값을 비교하여 같지 않을 경우 오류 발생
// 다른곳에서 링크 거는것을 방지하기 위한 코드
if (!get_session("ss_view_{$bo_table}_{$wr_id}"))
alert("잘못된 접근입니다.");

$sql = " select bf_source, bf_file from $g4[board_file_table] where bo_table = '$bo_table' and wr_id = '$wr_id' and bf_no = '$no' ";
$file = sql_fetch($sql);
if (!$file[bf_file])
alert_close("파일 정보가 존재하지 않습니다.");

if ($member[mb_level] < $board[bo_download_level]) {
$alert_msg = "다운로드 권한이 없습니다.";
if ($member[mb_id])
alert($alert_msg);
else
alert($alert_msg . "\\n\\n회원이시라면 로그인 후 이용해 보십시오.", "./login.php?wr_id=$wr_id&$qstr&url=".urlencode("$g4[bbs_path]/board.php?bo_table=$bo_table&wr_id=$wr_id"));
}

$filepath = "$g4[path]/data/file/$bo_table/$file[bf_file]";
$filepath = addslashes($filepath);
if (!is_file($filepath) || !file_exists($filepath))
alert("파일이 존재하지 않습니다.");

// 사용자 코드 실행
@include_once("$board_skin_path/download.skin.php");

// 이미 다운로드 받은 파일인지를 검사한 후 게시물당 한번만 포인트를 차감하도록 수정
$ss_name = "ss_down_{$bo_table}_{$wr_id}";
$ss_name .= "_{$no}";
if (!get_session($ss_name))
{
// 자신의 글이라면 통과
// 관리자인 경우 통과
// 3레벨 이상 통과
if (($write[mb_id] && $write[mb_id] == $member[mb_id]) || $is_admin){;}
else
{
if($member[mb_level] > 2 && $member[mb_2]< 3 ) { //레벨이 3이상이고 다운로드가 3개 이하이면 넘어간다<- 수정부분
;
}
else if ($board[bo_download_level] > 1) // 회원이상 다운로드가 가능하다면
{
// 다운로드 포인트가 음수이고 회원의 포인트가 0 이거나 작다면
if ($member[mb_point] + $board[bo_download_point] < 0)
alert("보유하신 포인트(".number_format($member[mb_point]).")가 없거나 모자라서 다운로드(".number_format($board[bo_download_point]).")가 불가합니다.\\n\\n포인트를 적립하신 후 다시 다운로드 해 주십시오.");

// 게시물당 한번만 차감하도록 수정
insert_point($member[mb_id], $board[bo_download_point], "$board[bo_subject] $wr_id 파일 다운로드", $bo_table, $wr_id . '|' . $no, "다운로드");
}

// 다운로드 카운트 증가
$sql = " update $g4[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);

set_session($ss_name, TRUE);
}
}

2군데만 수정하였습니다
처음 횟수 검사하는부분과
포인트 주는 부분입니다
2012-11-25 (일) 14:05:59
위 소스를 적용하니 레벨3 회원의 무료다운로드가 적용이 되지 않네요.
SQL 쿼리 상단부 삭제한 부분이 아닐까요?
2012-11-25 (일) 14:15:50
위쪽의 레벨3 무료다운로드 소스를 삭제하면 될듯 합니다.
아래쪽에서 else if 문에서 레벨3의 다운로드에 대한 정의가 되어 있으니 말이죠.
혹시 안되면.... 또 질문을 드릴지도~
2012-11-25 (일) 14:19:47
onlymilk74 님의 답변이 도움이 되었네요.
도움주신 도치즈님과 onlymilk74 님 감사합니다.
위쪽의 상단에서 무료다운로드 소스를 제거하니 정상적으로 잘 됩니다.
다행이시네요 ^^
댓글을 작성하시려면 로그인이 필요합니다.

그누4 질문답변

66,531건

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

+
제목 글쓴이 날짜 조회
12-11-25 조회 901
12-11-25 조회 1,892
12-11-25 조회 1,290
12-11-25 조회 1,109
12-11-25 조회 752
12-11-25 조회 985
12-11-25 조회 2,178
12-11-25 조회 840
12-11-25 조회 894
12-11-25 조회 1,709
12-11-25 조회 1,600
12-11-25 조회 1,404
12-11-25 조회 1,143
12-11-24 조회 1,626
12-11-24 조회 1,080
12-11-24 조회 838
12-11-24 조회 3,223
12-11-24 조회 2,117
12-11-24 조회 1,329
12-11-24 조회 941