PHP에서 브레이크 포인트 연속은 파일 다운로드를 처리 할 때 일반적인 요구 사항입니다. 다운로드 프로세스가 분리 된 후 전체 파일의 다시 다운로드를 피한 후 사용자가 중단 된 위치에서 계속 다운로드 할 수 있습니다. 일반적으로 중단 점 연속 전송을 구현하는 핵심은 HTTP 헤더 처리 및 서버의 범위 요청에 대한 지원에 있습니다.
그렇다면 stream_context_set_params를 사용하여 파일 중단 점 연속 전송을 구현할 수 있습니까? 어떻게 구성 하는가?
stream_context_set_params 는 기존 스트림 컨텍스트의 매개 변수를 설정하는 데 PHP에서 사용되는 함수입니다. 시간 초과, 알림 콜백 등과 같은 스트림의 동작을 조정하는 데 종종 사용됩니다. 사용 양식은 다음과 같습니다.
stream_context_set_params(resource $stream_context, array $params): bool
매개 변수는 다음을 포함 할 수 있습니다.
알림 : 콜백 함수를 설정하십시오
시간 초과 : 시간 초과 시간 설정 (초)
차단 : 흐름을 차단할지 여부
브레이크 포인트 연속 전송의 구현은 주로 HTTP 프로토콜의 범위 헤더에 의존하며 서버는 요청 헤더를 기반으로 해당 바이트 범위에서 데이터를 반환합니다. 예를 들어:
Range: bytes=1000-
클라이언트가 Byte 1000에서 다운로드를 시작하려고합니다.
그러한 요청을받은 후 서버는 상태 코드 206 부분 컨텐츠를 반환하고 응답 헤더에 컨텐츠 범위를 가져와 클라이언트에게 반환 한 파일의 일부를 알려줍니다.
엄격하게 말하면, Stream_Context_set_params 자체는 HTTP 헤더를 처리하도록 설계되지 않았습니다. 스트림 매개 변수를 설정하는 데 사용됩니다. HTTP 요청 헤더의 범위를 구성하는 데 직접 사용할 수 없으며 서버 측 응답 상태 코드 및 세그먼트 화 된 전송을 처리 할 수 없습니다.
BreakPoint 연속 전송을 지원하는 PHP에서 HTTP 요청을 시작하려면 HTTP 옵션과 함께 Stream_Context_create를 사용하여 요청 헤더를 설정해야합니다.
$options = [
'http' => [
'method' => 'GET',
'header' => "Range: bytes=1000-\r\n",
]
];
$context = stream_context_create($options);
$file = file_get_contents('http://m66.net/path/to/file', false, $context);
이렇게하면 클라이언트가 지정된 바이트에서 파일을 다운로드하도록 요청할 수 있습니다.
<?php
$start = 1000; // 에서1000바이트가 다운로드를 시작합니다
$options = [
'http' => [
'method' => 'GET',
'header' => "Range: bytes=$start-\r\n",
'ignore_errors' => true, // 수신 허용 206 응답
]
];
$context = stream_context_create($options);
$url = 'http://m66.net/path/to/largefile.zip';
$fileContent = file_get_contents($url, false, $context);
// 할 수 있다 $fileContent 기존 파일에 추가하십시오,연속 전송 및 병합을 구현하십시오
file_put_contents('localfile.zip', $fileContent, FILE_APPEND);
?>
위의 예에서는 HTTP 옵션의 헤더를 통해 범위를 추가하여 서버가 컨텐츠의 일부를 반환하도록하는 것입니다. Stream_Context_set_params는 요청 헤더를 설정할 책임이 없기 때문에 사용되지 않습니다.
클라이언트는 범위 헤더로 요청을 시작하여 중단 점을 계속하기위한 첫 번째 단계만으로 서버는 범위를 사용하여 요청을 올바르게 지원하고 응답해야합니다.
서버는 상태 코드 206 부분 컨텐츠를 반환해야합니다.
서버는 컨텐츠 범위 헤더를 올바르게 설정해야합니다
서버는 파일의 중단 점 읽기를 지원합니다
서버가 지원하지 않으면 클라이언트는 범위 헤더를 요청하고 여전히 전체 파일을 반환합니다.
Stream_Context_set_params 는 주로 HTTP 요청 헤더를 설정하지 않고 스트림 매개 변수를 설정하는 데 사용되며 중단 점 연속 전송을 직접 구현할 수 없습니다.
중단 점 연속 전송을 구현하려면 Stream_Context_create를 사용하고 HTTP 옵션에서 범위 요청 헤더를 설정해야합니다.
서버는 또한 중단 점 요청 범위 요청을 올바르게 지원해야합니다.
PHP 파일 작동 기능과 결합하여 클라이언트 중단 점 연속 파일 다운로드 기능을 실현할 수 있습니다.