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

· 2004-10-15 (금) 17:33:02 · 2836 · 1
안녕하세요

저두 자료실에 올린 파일이 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";

}
|

댓글 1개

어떤게 나을까요???
댓글을 작성하시려면 로그인이 필요합니다.

그누3 팁자료실

1,026건
+
제목 글쓴이 날짜 조회
04-10-24 조회 3,166
04-10-22 조회 3,108
04-10-22 조회 2,919
04-10-20 조회 5,749
04-10-19 조회 2,990
04-10-18 조회 3,213
04-10-17 조회 4,310
04-10-15 조회 3,537
04-10-15 조회 2,837
04-10-15 조회 3,831
04-10-15 조회 3,726
04-10-15 조회 4,504
04-10-14 조회 2,861
04-10-13 조회 3,114
04-10-13 조회 3,862
04-10-12 조회 3,301
04-10-12 조회 3,341
04-10-12 조회 3,002
04-10-12 조회 3,443
04-10-09 조회 4,159