사용자가 적절한 인증을 받으면 숨겨진 파일을 다운로드하는 간단한 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를 사용하도록 설정되었습니다.
흥미 롭습니다. 어쩌면 당신은 실행중인 프로세스 및 메모리 사용량과 같은 몇 가지 통계가있는 파일에 출력을 기록해야합니다. 유용 할 수 있습니다. – Hamish
너무 오랫동안 실행 중이거나 너무 많은 메모리를 소비하고 있기 때문에 프로세스를 죽이는 것으로 의심됩니다. – sberry