2012-02-21 2 views
0

사용자가 적절한 인증을 받으면 숨겨진 파일을 다운로드하는 간단한 PHP 스크립트를 작성했습니다. 전체 설정은 잘 작동합니다. 적절한 헤더를 보내면 파일 전송이 잘 시작됩니다 (작은 파일의 경우 끝납니다).Dreamhost에서 PHP가 신비하게 중단 된 파일 다운로드

그러나 150MB 파일을 제공하려고하면 파일 중간에 어딘가에서 연결이 신비하게 중단됩니다.

function readfile_chunked($filename, $retbytes = TRUE) { 
    $handle = fopen($filename, 'rb'); 
    if ($handle === false) return false; 
    while (!feof($handle) and (connection_status()==0)) { 
     print(fread($handle, 1024*1024)); 
     set_time_limit(0); 
     ob_flush(); 
     flush(); 
    } 
    return fclose($handle); 
} 

가 나는 또한 지금까지의 내가 할 수있는 한, 위의 그 함수를 호출하기 전에 다른 코드를 수행하여 문제를 해결하려고하지만, 다음은 (내게로 인터넷에 어딘가에서 가져온 적응) 관련 코드는입니다 그것은 아무것도하지 않는, 말 : 당신이 볼 수 있듯이

session_write_close(); 
    ob_end_clean(); 

    ignore_user_abort(); 
    set_time_limit(0); 

, 그것은 한 번에 메모리에 전체 파일을로드하려고하거나 그런 미친 아무것도하지 않습니다. 더 수수께끼를 만들기 위해, 그것을 죽이는 전송의 실제 지점은 50에서 110MB 사이에 떠있는 것처럼 보입니다. 그리고 그것은 서로 몇 초 안에 같은 파일에 대한 모든 연결을 죽이는 것처럼 보입니다. 친구와 동시에 다운로드). 중단 된 파일에 아무 것도 추가되지 않으며 로그에 오류가 표시되지 않습니다.

저는 Dreamhost를 사용하고 있기 때문에 너무 오래 실행되어 워치 독이 내 프로세스를 죽일 수도 있습니다. 문제에 대해 공유 할 경험이있는 사람이 있습니까? 다른 문제가있을 수 있습니까? 해결 방법이 있습니까?

기록을 위해 내 Dreamhost는 PHP 5.2.1 FastCGI를 사용하도록 설정되었습니다.

+0

흥미 롭습니다. 어쩌면 당신은 실행중인 프로세스 및 메모리 사용량과 같은 몇 가지 통계가있는 파일에 출력을 기록해야합니다. 유용 할 수 있습니다. – Hamish

+0

너무 오랫동안 실행 중이거나 너무 많은 메모리를 소비하고 있기 때문에 프로세스를 죽이는 것으로 의심됩니다. – sberry

답변

1

Dreamhost에 대한 경험이 거의 없지만 (Dreamhost에서 허용하는 경우) mod_xsendilfe을 대신 사용할 수 있습니다.