2012-01-13 1 views
0

호스팅 제공 업체가 서버 (데비안)와 PHP (5.2.6에서 5.3.2로)를 업그레이드 한 후 웹 사이트에서 파일 다운로드 스크립트에 문제가 있습니다.PHP 강제 다운로드 - 100MB보다 큰 파일은 단지 약간의 바이트 만 다운로드합니다

class Download_Controller extends Website_Controller 
{ 

    public function index() 
    { 
     if (isset($_GET['file'])) { 
      $file  = $_GET['file']; 
      $filORM = ORM::factory('file')->where('filename', $file)->find(); 

      if ($filORM->loaded and $filORM->deleted=='N' and file_exists(APPPATH.'downloads/'.$file)) { 
      //we can serve file download 
      $this->auto_render = false; 

      $filORM->counter = $filORM->counter + 1; 
      $filORM->save(); 

      $dl = ORM::factory('download'); 
      $dl->download_file_id = $filORM->id; 
      $dl->created = time(); 
      $dl->country_id = $this->country->id; 
      $dl->ip = $this->_getRealIpAddr(); 
      $dl->browser = Kohana::user_agent('browser'); 
      $dl->version = Kohana::user_agent('version'); 
      $dl->platform = Kohana::user_agent('platform'); 
      $dl->save(); 

      return download::force(APPPATH.'downloads/'.$file); 
      } 
      else { 
      $this->download_error(); 
      } 

     } 
     else { 
      //else here we load download center UI 
      $this->section(); 
     } 
    } 
} 

내가 Kohana PHP의 프레임 워크를 사용하고 있습니다 : 100메가바이트보다 작은 파일이 잘 다운로드 할 수 있지만 100메가바이트는 같은 156 바이트 파일을 다운로드합니다 다음 큰 파일을 것입니다 ... 여기 내 다운로드 스크립트입니다. 버전 2.3.x.

+0

서버에 대한 액세스 권한이 있습니까? 또는 관리되는 서버입니까? – Stony

+0

ssh 접속 권한이 있습니다. –

+0

156 바이트 파일의 내용은 무엇입니까? 특별한 것? – Maerlyn

답변

2

에 바인딩되지 않습니다, 당신은 내게 예를 들어 링크를했다, 나는 하나를 시도하고, 156 바이트 파일이 다운로드 한 내용은 다음과 같습니다.

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 141637633 bytes) in /home/www-data/system/helpers/download.php on line 93

PHP의 메모리가 부족합니다. 업그레이드하는 동안 php.ini의 memory_limit도 변경되었다고 가정합니다. 단기적인 해결책은 원래의 (높은) 가치로 되돌려 놓는 것입니다.

대용량 파일을 다운로드하려면 mod_xsendfile (특수 아파치 이외의 서버에서도 사용 가능)을 살펴보고 특별한 http 헤더를 설정하고 PHP가 아닌 웹 서버에 작업을 맡겨야합니다.

0

Kohana의 download::force()이 다른 프레임 워크와 동일한 방식으로 작동하는 경우 - PHP는 메모리에 100MB 이상의 데이터를 보관할 수 없거나 저장할 수 없습니다.

+0

서버 업그레이드 전에 완벽하게 작동했습니다 ...? 해결 방법은 없습니까? –

0

어떤 코드가 download::force()인지 모르겠지만 전체 파일을 메모리에로드하고 PHP는 Allowed memory size is exhausted과 같은 오류로 실행을 중단합니다. 클라이언트가 연결을 중단하면 작은 청크로 파일을로드하고 출력해야합니다.

업데이트

귀하의 파일 Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 141637633 bytes) in /home/www-data/system/helpers/download.php on line 93이 포함되어 있습니다. 그래서, 제가 쓴 것처럼 작은 덩어리로 출력하십시오.

0

당신은 readfile(APPPATH.'downloads/'.$file)에 시도 할 수 다음 exit() 직접 return없이, 당신은 메모리 더 이상 문제 의견에

관련 문제