중단점에서 다운로드를 재개하도록 PHP를 활성화하는 방법은 무엇입니까? 사실 쉽게 말하면 이 변수 $_SERVER['HTTP_RANGE']를 통해 사용자가 요청한 파일의 범위를 얻어낸 뒤 프로그램이 그 파일의 출력을 제어하는 것이다. 예를 들어, 파일에 대한 첫 번째 요청의 범위는 0~999바이트이고 두 번째 요청의 범위는 1000~1999바이트입니다. 1000바이트의 콘텐츠를 요청할 때마다 프로그램은 fseek를 통해 해당 파일 위치를 가져옵니다. 그런 다음 출력합니다. 그것이 모두에게 도움이 되기를 바랍니다.
$fname = './05e58c19552bb26b158f6621a6650899'; $fp = fopen($fname,'rb'); $fsize = filesize($fname); if (isset($_SERVER['HTTP_RANGE']) && ($_SERVER['HTTP_RANGE'] != "") && preg_match("/^bytes=([0-9]+)-$/i", $_SERVER['HTTP_RANGE'], $match) && ($match[1] < $fsize)) { $start = $match[1]; } else { $start = 0; } @header("Cache-control: public"); @header("Pragma: public"); if ($start > 0) { fseek($fp, $start); Header("HTTP/1.1 206 Partial Content"); Header("Content-Length: " . ($fsize - $start)); Header("Content-Ranges: bytes" . $start . "-" . ($fsize - 1) . "/" . $fsize); } else { header("Content-Length: $fsize"); Header("Accept-Ranges: bytes"); } @header("Content-Type: application/octet-stream"); @header("Content-Disposition: attachment;filename=1.rm"); fpassthru($fp);
Disuz!의 attachment.php 파일이 중단점 재개를 구현하는 방법도 살펴볼 수 있습니다. 코드를 살펴보세요.
사용자가 요청한 파일 범위는 $_SERVER['HTTP_RANGE']를 통해서도 얻을 수 있습니다. 자세한 내용은 소스 코드 분석을 참조하세요. 여기서 토론을 시작하겠습니다.
$range = 0; if($readmod == 4) { dheader('Accept-Ranges: bytes'); if(!emptyempty($_SERVER['HTTP_RANGE'])) { list($range) = explode('-',(str_replace('bytes=', '', $_SERVER['HTTP_RANGE']))); $rangesize = ($filesize - $range) > 0 ? ($filesize - $range) : 0; dheader('Content-Length: '.$rangesize); dheader('HTTP/1.1 206 Partial Content'); dheader('Content-Range: bytes='.$range.'-'.($filesize-1).'/'.($filesize)); } }
관련 추천:
위 내용은 중단점 이력서 다운로드를 구현하기 위해 PHP를 활성화하는 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!