2010-01-11 7 views
1

문제점이 있습니다. 이미지를 Zip 파일로 압축 한 다음 다운로드 할 Zip 파일을 강제 실행하는 PHP 스크립트가 있습니다. 이제 내 문제는 얼마나 많은 공간이 다운로드되었는지 IE에 표시되지 않는다는 것입니다. 예 : 2MB는 20MB 중 ..... 15 초 남았습니다. Firefox는 완벽하게 작동합니다. 주석에서 언급 한 바와 같이PHP 강제 파일 다운로드. 다운로드 된 공간의 양을 표시하지 않음

내 코드

  header("Content-Disposition: attachment; filename=" . urlencode($zipfile)); 
     header("Content-Type: application/x-zip-compressed"); 
     header("Content-Description: File Transfer");  
      header("Content-Transfer-Encoding: binary"); 
      header("Content-Length: " . filesize($filename)); 

      $fd = fopen($filename,'r'); 

      $content = fread($fd, filesize($filename)); 



      print $content; 
+1

IE에서 작동하지 않는 이유는 모르겠지만 다른 메모에서는 fopen/fread 대신 readfile ($ filename)을 사용해야합니다. 파일을 보내기 전에 전체 파일을 메모리에 버퍼링하지 않으므로 훨씬 더 메모리 친숙합니다. –

답변

3

주요 문제, 당신은 이전에 파일 크기에 따라 매우 긴 대기의 원인이 될 수 보내기 메모리에 전체 파일을 저장하는 것입니다. 당신이 선호하는 것은 세그먼트가 메모리에 읽혀질 때 버퍼를 출력하는 것입니다 (예를 들어, 1024 바이트 블록). 전 출력에 전체 파일을 읽으려고하지 않지만 파일이 아니라 출력 블록들이 출력 버퍼로 읽어로

if ($file = fopen($filename, 'rb')) { 
    while(!feof($file)) { 
     print(fread($file, 1024*8)); 
     flush(); 
    } 
    fclose($file); 
} 

:

당신의 라인을 따라 더 뭔가를 시도 할 수 있습니다.