달력

4

« 2025/4 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
2009. 11. 25. 18:53

대용량파일 다운로드 PHP2009. 11. 25. 18:53

윈도우+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") )
한글주소일경우 브라우져에 따른 문제와 다운로드 파일명등의 문제가 있네요.

더 좋은 방법있으면 소개해주세요~
:
Posted by 비개인오후