2011-02-23 5 views
4

Accept-Range 헤더를 인식하도록했습니다.URL을로드하고 그 중 마지막 20KB 만 가져 오는 방법

저는 항상 2MB 파일을 반환하는 URL을 가지고 있습니다. 나는 이것을 많이 필요로하지 않고 마지막 섹션 인 20-50k 만 필요합니다.

사용 방법을 잘 모르겠습니다. cURL을 사용해야합니까? 현재 file_get_contents()을 사용 중입니다.

누군가가 예제/튜토리얼을 제공 할 수 있습니까?

감사합니다.

편집 : 이것이 가능하지 않은 경우 게시 내용은 무엇입니까? Here ... 편집 : Ulrika! 난 미치지 않았어.

+0

물론 가능합니다. 즉, 가장 많이 지원하는 서버를 지원합니다. 나는 오늘 밤에 예제 코드를 올릴 것이지만, 실제로는 적절한 헤더를 설정하고 곱슬 곱슬하게 요청할 수 있어야한다. – Brad

답변

3

이것은 Range 헤더를 이용하여 수신 할 수있다. HTTP 1.1 spec을 참조하십시오. 요청시 다음 형식의 헤더를 보내려고합니다.

Range: bytes=-50000 

이렇게하면 마지막 50,000 바이트가됩니다. 필요한만큼 조정하십시오.

file_get_contents에 컨텍스트를 사용하여이 헤더를 지정할 수 있습니다. 예 :

// Create a stream 
$opts = array(
    'http'=>array(
    'method' => "GET", 
    'header' => "Range: bytes=-50000\r\n" 
) 
); 

$context = stream_context_create($opts); 

// Open the file using the HTTP headers set above 
$file = file_get_contents('http://www.example.com/', false, $context); 
+0

매력처럼 작동했습니다. 매우 감사. – webnoob

-4

당신은 그렇게 할 수 없습니다. 소스 서버가 전체 파일을 순차적으로 전송하는 전체 파일을로드하고 대부분을 폐기해야합니다.

"내가 내 카 스테레오에서이 라디오 방송국을 튜닝하고있어 나머지 5 분이 끝날 때까지 기다리지 않고도 마지막 5 분만 듣고 싶다. ".

+0

그러나 브라우저는 얼마나 큰 파일인지 알고 있습니다. 총 크기를 가져 오는 것을 멈추고 지정한 범위를 반환하는 것이 아무것도 없습니다. 이것은 연결이 끊어졌을 때 다운로드를 다시 시작하고 동일한 주체 여야한다고 말했습니다. 라디오 쇼를 통해, 마지막 5 분을받는 데 얼마나 오래 걸릴지 모릅니다. 그렇다면 그렇게 할 수 있습니다. – webnoob

+0

@webnoob : 틀렸어. – Shikiryu

+0

다음 재개 가능한 다운로드에서 어떻게 작동합니까? 파일을 보내는 사람에게만 작동합니까? – webnoob

0

file_get_contents()이고 디스크의 패스 스루 캐시 파일로 덤프 한 경우 unix/linux tail -c을 사용하면 마지막 20kb 정도만 다시 가져올 수 있습니다. 이것은 실제 전송을 완화하지는 않지만 응용 프로그램에 20kb를 가져옵니다.

+0

전송에 문제가 없으며 TBH, 2MB 파일을 가져올 필요가 없습니다. 나는이 헤더를 사용할 때 사람들이 말하는 것을 이해하지 못합니다. 그것이 이것을하지 않으면, 그것은 무엇을합니까? – webnoob

+0

downvote는 ... * 합법적 인 * 해결책입니다. 그것은 겸손하지 않고 올바르게 말로 표현되었습니다. – philwinkle

+0

질문은 명시 적으로 전체 파일을 다운로드하지 않는 방법을 묻기 때문에. –

0

이 실제로 가능 - 전송 된 HTTP 헤더의 예 this question 표시하고 서버가 지원 제공

관련 문제