대용량 파일 다운로드시 문제점을 이렇게 해결해봤습니다. 정보
그누호환 대용량 파일 다운로드시 문제점을 이렇게 해결해봤습니다.본문
안녕하세요
저두 자료실에 올린 파일이 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";
}
저두 자료실에 올린 파일이 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
0
댓글 전체
어떤게 나을까요???