[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”) )
한글주소일경우 브라우져에 따른 문제와 다운로드 파일명등의 문제가 있네요.
더 좋은 방법있으면 소개해주세요~