2011-01-22 3 views
0

나는 파일을 다운로드하는 프로그램으로 PHP에서 작업 중입니다. 내가 Resumable downloads when using PHP to send the file?300M보다 큰 다운로드를 재개 할 수 없습니다.

내가 300M, 내가 얻을> 파일을 다운로드하려고 할 때 확실히, 300M에서 파일을 작동하거나 멀티 스레드 또는 단일 스레드 다운로드, 그러나에 언급 된 몇 가지 스크립트를 사용 http://localhost/download.php?file=abc.zip : 같은 스크립트 요청입니다 싱글 스레드 다운로드시 문제가 발생했습니다. 250M 데이터 만 다운로드 했으므로 http 연결이 끊어진 것처럼 보입니다. 그것은 중단 점에서 깨지지 않습니다. 왜요? 그것은 파산 곳 스크립트 디버깅, 나는 정확히 :

이 내가 파일을 다운로드하기 위해 멀티 스레드를 사용할 때 작동 ..하지만 단지 250M 데이터 echo에 버퍼 또는 print을 얻을 수있는 모든 요청 된 문서처럼 보인다
$max_bf_size = 10240; 
$pf = fopen("$file_path", "rb"); 
fseek($pf, $offset); 
while(1) 
{ 
    $rd_length = $length < $max_bf_size? $length:$max_bf_size; 
    $data = fread($pf, $rd_length); 
    print $data; 
    $length = $length - $rd_length; 
    if($length <= 0) 
    { 
     //__break-point__ 
     break; 
    } 

} 

답변

0

fread()는 요청한 바이트 수를 읽으므로 읽을 바이트 수를 계산하는 불필요한 작업을 수행하고 있습니다. 단일 스레드 및 다중 스레드 다운로드의 의미를 모르겠습니다. 전체 파일을 덤프하는 readfile()에 대해 알고 있습니까? $ offset 바이트부터 시작하여 $ length 바이트까지 시작하는 파일의 일부분을 읽어야한다고 가정합니다.

필자의 웹 서버 (Apache?) 구성과 ISP 제한 (해당되는 경우)도 확인합니다. 최대 응답 크기 또는 시간이 제한 될 수 있습니다.

이 시도 :

define(MAX_BUF_SIZE, 10240); 
$pf = fopen($file_path, 'rb'); 
fseek($pf, $offset); 
while (!feof($pf)) { 
    $data = fread($pf, MAX_BUF_SIZE); 
    if ($data === false) 
     break; 
    print $data; 
} 
fclose($pf);