대용량 파일 다운로드시 문제점을 이렇게 해결해봤습니다. > 그누3 팁자료실

그누3 팁자료실

대용량 파일 다운로드시 문제점을 이렇게 해결해봤습니다. 정보

그누호환 대용량 파일 다운로드시 문제점을 이렇게 해결해봤습니다.

본문

안녕하세요

저두 자료실에 올린 파일이 10메가가 넘어가니까 아파치가 리소스를 99% 점유하면서 웹서버가 버벅거리고
다운로드 창이 한참만에야 뜨는 문제로 고심 중에 있었습니다.
접속자가 많은 경우에는 아예 뜨질 않는 경우가 생기구요.

어제 잠깐 들렀다가 화니 님이 지적해주신

ob_start();
include $doc;
$ob_content = ob_get_contents();
ob_end_clean();

상기 코드가 문제라는 사실을 알게되었고 화니 님처럼 새로운 download.php 를 만들지 않는
해결방안을 모색하던 중에 index.php 만 약간 손보면 된다는 사실을 발견하엿습니다.

즉, 파일이름이 gbdownload.php 라면 버퍼링을 하지 않고 그냥 인클루두만 해버리는 거죠.

자세한 내용은 아래 소스 참고하시면 쉽게 이해되실듯~~

P.S. 해결의 실마리를 제공해 주신 화니 님께 감사의 말씀을 드리고 싶네요 ^^


//------------------------ 수정전 ------------------------------------//
// $doc 를 실행하여 결과물은 저장해 놓음
ob_start();
include $doc;
$ob_content = ob_get_contents();
ob_end_clean();

// 3.23 lo_location 추가
$location = $html_title;
if (!$location)
    $location = $doc;
// 접속시간을 INSERT 하고
$sql = " insert into $cfg[table_login]
            set lo_ip = '$_SERVER[REMOTE_ADDR]',
                mb_id = '$member[mb_id]',
                lo_datetime = '$now',
                lo_location = '$location' ";
$result = @mysql_query($sql);
if (!$result) { // 오류가 발생한다면 UPDATE 함
    $sql = " update $cfg[table_login]
                set mb_id = '$member[mb_id]',
                    lo_datetime = '$now',
                    lo_location = '$location'
              where lo_ip = '$_SERVER[REMOTE_ADDR]' ";
    @mysql_query($sql);
}

// 3.31
// 방문자수의 접속을 남김
if ($cfg[count_use] && file_exists("bbs/countinsert.inc.php")) {
    include "bbs/countinsert.inc.php";
}

// 3.35
// switch (_DOCTYPE_) { } 구문 분리
include "./indexdoctype.php";


//------------------------ 수정후 ------------------------------------//

// 3.23 lo_location 추가
$location = $html_title;
if (!$location)
    $location = $doc;
// 접속시간을 INSERT 하고
$sql = " insert into $cfg[table_login]
            set lo_ip = '$_SERVER[REMOTE_ADDR]',
                mb_id = '$member[mb_id]',
                lo_datetime = '$now',
                lo_location = '$location' ";
$result = @mysql_query($sql);
if (!$result) { // 오류가 발생한다면 UPDATE 함
    $sql = " update $cfg[table_login]
                set mb_id = '$member[mb_id]',
                    lo_datetime = '$now',
                    lo_location = '$location'
              where lo_ip = '$_SERVER[REMOTE_ADDR]' ";
    @mysql_query($sql);
}

// 3.31
// 방문자수의 접속을 남김
if ($cfg[count_use] && file_exists("bbs/countinsert.inc.php")) {
    include "bbs/countinsert.inc.php";
}

if($doc=="bbs/gbdownload.php") {
include $doc;
}
else {

// $doc 를 실행하여 결과물은 저장해 놓음
ob_start();
include $doc;
$ob_content = ob_get_contents();
ob_end_clean();

// 3.35
// switch (_DOCTYPE_) { } 구문 분리
include "./indexdoctype.php";

}
추천
0
  • 복사

댓글 전체

© SIRSOFT
현재 페이지 제일 처음으로