2011-02-04 4 views
4

아파치 2.2에서 파일을 보내기 위해 PHP 함수 virtual()을 사용하고 있습니다. (이것은 readfile()보다 빨리 작동합니다) 사용자 액세스 권한을 확인할 수 있습니다.아파치와 PHP에 의한 파일 전송 HTTP_RANGE 지원을 통한 virtual() 함수

하지만 HTTP_RANGE와 함께 지속적인 다운로드 지원을 추가 할 수있는 방법이 있습니까?

HTTP_RANGE 작동하는지,하지만 실제 아파치처럼 항상 같은 파일 범위를 보내는처럼이

if(isset($_SERVER['HTTP_RANGE'])) { 
     list($a, $range)=explode("=",$_SERVER['HTTP_RANGE']); 
     str_replace($range, "-", $range); 
     $size2=$size-1; 
     $new_length=$size-$range; 
     header("HTTP/1.1 206 Partial Content"); 
     header("Content-Length: $new_length"); 
     header("Content-Range: bytes $range$size2/$size"); 
     apache_setenv('HTTP_RANGE', $_SERVER['HTTP_RANGE']); 
    } else { 
     $size2=$size-1; 
     header("Content-Range: bytes 0-$size2/$size"); 
     header("Content-Length: ".$size); 
} 

그래서 웹 클라이언트가 다운로드 한 파일 같은 것들을 시도 : 클라이언트 4000-를 요구하는 경우 6000 바이트, 아파치는 0-2000 등을 전송하므로 파일이 손상되었습니다.

나는 apache_setenv를 사용하여이를 수행 할 수있는 방법이 있다고 생각하지만, Google에서는 그 어떤 제안도 찾을 수 없습니다.

+0

또한 서버와 클라이언트에서 트랜잭션 중에 전송되는 실제 HTTP 헤더를 게시 할 수 있습니다. – karlcow

답변

3

Apache 용 xfilesend 모듈을 사용해보십시오.