php 메모리 사용않고 바로 받을수 있게 하는법 아시는분?? > 그누3질답

그누3질답

php 메모리 사용않고 바로 받을수 있게 하는법 아시는분?? 정보

그누보드 php 메모리 사용않고 바로 받을수 있게 하는법 아시는분??

본문

50M이상의 파일을 동시에 5명 이상이 받으면 서버가 뻗어 버립니다.
분석을 해보니... 그누보드가 파일을 메모리로 넘겨 버린다음 읽어버리는것입니다.
그래서 512M 메모리를 달고 있는 서버에서는 무리가 따르더군요
아파치에서 index를 통해서 받으니깐 메모리에 넘기지 않고 바로 받아 지더군요..

위그림을 보면 첫번째는 다운받기전.
두번째 그림은 다운시작후입니다.
6M채 남지 않고 스왑으로 돌아가고 있습니다.

댓글 전체

<?php
$file = "test.mp3"; // file to be send to the client
$speed = 8.5; // 8,5 kb/s download rate limit

if(file_exists($file) && is_file($file)) {

  header("Cache-control: private");
  header("Content-Type: application/octet-stream");
  header("Content-Length: ".filesize($file));
  header("Content-Disposition: filename=$file" . "%20");

  flush();

  $fd = fopen($file, "r");
  while(!feof($fd)) {
        echo fread($fd, round($speed*1024));
      flush();
      sleep(1);
  }
  fclose ($fd);

}
?>

위의 소스를 응용해 보십시오.
간단한 스트리밍서비스를 구현하는 소스인데..
flush, sleep 함수가 네트웍트래픽과 서버부하를 다소 줄여주는 역할을 합니다.
$speed 값을 알맞게 해주면 트래픽 조절이 가능해집니다.
아래 flush 관련 링크입니다.

http://kr.php.net/manual/kr/function.flush.php
flush 함수를 사용해 보십시오.
일정량 만큼 읽을수 있는 루프를 돌려서 flush 함수로 버퍼를 비워주면 될듯싶습니다.
물론 서비스 프로세스가 지속되어 늘어나는 현상은 발생하겠지만 서버가 다운로드가 아주 많기 전에는 서버가 뻗어버리는 것은 어느정도 방지할수 있을듯 합니다.
전체 9,564
그누3질답 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1402호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT