2012-09-19 2 views
2

브라우저에서 파일 다운로드 진행 상황을 확인할 수없는 PHP 관리 파일 다운로드에 문제가 있습니다. 사실 브라우저는 파일이 완전히 다운로드 될 때까지 기다리고 기다리고 기다리는 것처럼 보입니다. 그러면 파일이 다운로드 목록에 나타납니다 (chrome 및 firefox 포함). 나는 심지어 IE8로 파일을 다운로드 할 수 없다. 브라우저에 실제 파일 크기와 다운로드 진행 상황을 표시하고 싶습니다.php 다운로드가 브라우저에서 진행 상황을 표시하지 않습니다.

비정상적으로 다운로드는 방화 광에서 보이지 않습니다 (다운로드 URL을 붙여 넣으면 네트워크 탭에 줄이 없음).

나는 compress/zlib에 문제가있는 것으로 의심되어서 나는 둘 다 비활성화했다. 동일한 결과로 출력 버퍼링을 비활성화했습니다.

라이브 예제는 여기에서 찾을 수 있습니다 : http://vps-1108994-11856.manage.myhosting.com/download.php 은 phpinfo : 코드는 다음과 같습니다 http://vps-1108994-11856.manage.myhosting.com/phpinfo.php

, 당신의 도움에 감사드립니다.

코드의 잠은 다운로드가 진행 상황을 확인할 수있을만큼 길 었는지 확인하는 것이 었습니다.

+0

"청크 인코딩 (Chunked Encoding)"과 관련이있을 수 있습니다. –

+0

Funnily 다운로드 진행률이 내 옆면에 잘 보이고 있습니다 ... – Havelock

+0

Chrome은 진행률 표시 줄을 표시하지만 파일 크기를 모르는 경우에만 표시됩니다. – 472084

답변

1

정말 간단합니다.

<?php 

header("Content-Type: application/epub+zip"); 
header("Content-disposition: attachment; filename=" . $publicname)); 

if(!readfile($name))  
    echo 'Error!'; 
?> 

정말 필요한 것입니다.

1
  header("Content-Type: application/epub+zip"); 
      header("Pragma: public"); 
      header("Expires: 0"); 
      header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
      header("Cache-Control: public"); 
      header("Content-Description: File Transfer"); 
      header("Content-Transfer-Encoding: binary"); 
      header("Content-Length: " . filesize($file_path)); 
      header("Content-disposition: attachment; filename=" . $local_file_name); 

      // dump the file and stop the script 
      $chunksize = 128 * 1024; // how many bytes per chunk (128 KB) 
      $size = filesize($file_path); 
      if ($size > $chunksize) 
      { 
       $handle = fopen($file_path, 'rb'); 
       $buffer = ''; 
       while (!feof($handle)) 
       { 
        $buffer = fread($handle, $chunksize); 
        echo $buffer; 
        flush(); 
        sleep(1); 
       } 
       fclose($handle); 
      } 
      else 
      { 
       readfile($file_path); 
      } 

난 당신의 코드 프랜시스를 수정했습니다. 그리고 이제는 작동합니다 ... :)

0

이는 방화벽이나 사용자와 원격 사이트 간의 일종의 프록시 때문일 수 있습니다. 웹 VPN에서 진행할 때까지 gzip을 비활성화하고 버퍼를 비우는 등 동일한 문제로 씨름 중이었고 진행 표시기가 다시 나타났습니다.

진행률 표시기가 버그라고 생각하지 않습니다. 콘텐츠가 다운로드되기 전에 출퇴근 중이므로 다운로드 대기 상태로 표시됩니다. 그런 다음 콘텐츠를 검색하거나 승인하면 사이트의 정상적인 다운로드 속도에 비해 매우 빨리 내려갈 수 있습니다. 파일이 충분히 크면이 단계에서 진행률 표시기를 볼 수 있습니다.

이것이이 동작의 진정한 이유인지 여부를 결정하는 것 외에는 아무 것도 할 수 없습니다.

관련 문제