[php] 대용량 파일 다운로드

윈도우+PHP4 환경에서 테스트한 내용입니다.

보통 다운로드를 사용할때

$fp = fopen($filename, “rb”);

if (!fpassthru($fp)) {

fclose($fp);

}

이런식으로 다운로드를 합니다.

하지만 용량이 100M정도를 저렇게하면 웹서버가 CPU100%를 차지하면서 다운로드를 멈쳐도 서버가 살아나지 않더군요.

PHP의 memory_limit를 200M정도로 늘려도 현상은 같았습니다.

코드를 아래와 같이 바꾸면 문제가 해결됩니다.

$fp = fopen($filename, “rb”);

while(!feof($fp)) {

     echo fread($fp, 100*1024);

     flush();

}

fclose ($fp);

처음 서버에서 파일을 읽을때 CPU가 100%를 차지하지만 다운로드가 시작되면 CPU점유율이

다시 내려갑니다.

아마 파일을 한번에 메모리에 읽는경우와 조금씩읽는방법의 차이인듯하네요.

제일 좋은건 그냥 URL주소로 다운받는건데( header(“location:$filename”) )

한글주소일경우 브라우져에 따른 문제와 다운로드 파일명등의 문제가 있네요.

더 좋은 방법있으면 소개해주세요~

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...

페이스북/트위트/구글 계정으로 댓글 가능합니다.