찾다
백엔드 개발PHP 튜토리얼중단점 이력서 전송을 지원하는 파일 다운로드 PHP 클래스 구현

중단점, PHP에서 업로드 재개

이 기사의 예에서는 중단점 이력서 다운로드를 지원하는 PHP로 구현된 파일 다운로드 클래스와 그 사용법을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 구체적인 방법은 다음과 같습니다.

일반적으로 PHP는 주로 HTTP 프로토콜의 HTTP_RANGE 헤더에 의존하여 중단점 재개를 지원합니다.

HTTP 중단점 재개 원칙:

Http 헤더 Range, Content-Range()
HTTP 헤더에서 Range 및 Content-Range 엔터티 헤더는 일반적으로 중단점 다운로드에 사용됩니다.
Range 사용자 요청 헤더에서 첫 번째 바이트 위치를 지정합니다. (Range: 200-300)
Content-Range는 응답 헤더에 사용됩니다

전체 파일 다운로드 요청:

GET /test.rar HTTP/1.1
연결: close
호스트: 116.1.219.219
범위: bytes=0-801 //전체 파일을 다운로드하기 위한 일반 요청은 bytes=0- 또는 이 헤드를 사용하지 마세요

일반 응답:

HTTP/1.1 200 OK
Content-Length: 801
Content-Type: application/octet-stream
Content-Range: 바이트 0-800/801 //801: 총 파일 크기

FileDownload.class.php 클래스 파일 코드는 다음과 같습니다.

  1. /**
  2. * 다운로드 클래스, 중단점 이력서 다운로드 지원
  3. * @time: 2015 06 30 09:36
  4. * @author:guoyu@xzdkiosk.com
  5. * PHP 다운로드 클래스, 중단점 이력서 다운로드 지원
  6. * Func:
  7. * download: 파일 다운로드
  8. * setSpeed: 다운로드 속도 설정
  9. * getRange: 헤더의 범위 가져오기
  10. */
  11. class FileDownload{ // 클래스 시작
  12. private $_speed = 512; // 다운로드 속도
  13. /**Download
  14. * @param String $file 다운로드할 파일 경로
  15. * @param String $name 파일명, 비어 있으면 다운로드한 파일명과 동일
  16. * @param boolean $reload 중단점 연속 통과 활성화 여부
  17. */
  18. public 함수 download($file, $name =' ', $reload=false){
  19. if(file_exists($file)){
  20. if($name==''){
  21. $name = basename($file)
  22. }
  23. $fp = fopen($file, 'rb')
  24. $file_size = filesize($file)
  25. $ranges = $this->getRange($file_size); 🎜>
  26. header('cache-control:public');
  27. header('content-type:application/octet-stream')
  28. header('content-disposition:attachment; filename='. $name );
  29. if($reload && $ranges!=null){ // 재개
  30. 헤더('HTTP/1.1 206 부분 콘텐츠')
  31. header('Accept-Ranges : bytes');
  32. // 남은 길이
  33. header(sprintf('content-length:%u',$ranges['end']-$ranges['start']))
  34. // 범위 정보
  35. header(sprintf('content-range:bytes %s-%s/%s', $ranges['start'], $ranges['end'], $file_size ) ); // fp 포인터가 중단점 위치로 점프합니다.
  36. fseek($fp, sprintf('%u', $ranges['start']))
  37. }else{
  38. header('HTTP/1.1 200 OK');
  39. header('content-length:'.$file_size)
  40. }
  41. while(!feof($fp)){
  42. echo fread($fp, round($this->_speed*1024,0));
  43. ob_flush()
  44. //sleep(1) // 테스트용으로 사용, 다운로드 속도 저하 속도
  45. }
  46. ($fp!=null) && fclose($fp)
  47. }else{
  48. return ''; 🎜>
  49. /**다운로드 속도 설정
  50. * @param int $speed
  51. */
  52. 공개 함수 setSpeed($speed){
  53. if(is_numeric($speed) && $speed>16 && $speed $ this- >_speed = $speed;
  54. }
  55. }
  56. /**헤더 범위 정보 가져오기
  57. * @param int $file_size 파일 크기
  58. * @return Array
  59. */
  60. 비공개 함수 getRange($file_size){
  61. if(isset($ _SERVER[ 'HTTP_RANGE']) && !empty($_SERVER['HTTP_RANGE'])){
  62. $range = $_SERVER['HTTP_RANGE']
  63. $range = preg_replace('/[s|,] .* /', '', $range)
  64. $range =explosion('-', substr($range, 6))
  65. if(count($range) $ range[1] = $file_size;
  66. }
  67. $range = array_combine(array('start','end'), $range)
  68. if(empty($range['start') ]) ){
  69. $range['start'] = 0;
  70. }
  71. if(empty($range['end'])){
  72. $range['end'] = $ file_size;
  73. }
  74. return $range;
  75. }
  76. return null
  77. }
  78. } // 클래스 종료
  79. 코드 복사

데모 코드는 다음과 같습니다.
  1. require('FileDownload.class.php')
  2. $file = 'book.zip ';
  3. $name = time().'.zip'; $obj = new FileDownload()
  4. $flag = $obj->download($file, $name); > / /$flag = $obj->download($file, $name, true); // 중단점 재개
  5. if(!$flag){
  6. echo '파일이 없습니다'; 🎜> }
  7. ?>
  8. 코드 복사
재개 가능한 다운로드 테스트 방법:

linux wget 명령을 사용하여 다운로드를 테스트합니다. wget -c -O 파일 http://xxx

1. 먼저 중단점 재개를 끄세요

$flag = $obj->download($file, $name)
  1. 코드 복사

test@ubuntu:~/Downloads$ wget -O test.rar http://demo.test.com/demo.php
--2013-06 -30 16:52:44-- http://demo.test.com/demo.php
    호스트 데모.test.com 확인 중... 127.0.0.1
  1. 데모.test.com에 연결 중| .0.1|:80... 연결되었습니다.
  2. HTTP 요청 전송됨, 응답 대기 중... 200 OK
  3. 길이: 10445120(10.0M) [application/octet-stream]
  4. 저장 위치: “test.rar”
  5. 30 % [==========================> ] 3,146,580 513K/s 예상 시간 14초
  6. ^C
  7. test@ubuntu :~/Downloads$ wget -c -O test.rar http://demo.test.com/demo.php
  8. --2013-06-30 16:52:57-- http://demone.test .com/demo.php
  9. 호스트 데모.test.com 확인 중... 127.0.0.1
  10. 연결 중 데모.test.com|127.0.0.1|:80... 연결되었습니다.
  11. HTTP 요청이 전송되었으며 응답을 기다리는 중... 200 OK
  12. 길이: 10445120(10.0M) [application/octet-stream]
  13. 저장 위치: “test.rar”
  14. 30% [= ==========================> ] 3,146,580 515K/s 예상 시간 14초
  15. ^C
  16. 코드 복사
wget -c가 업로드를 재개할 수 없음을 알 수 있습니다

2. 중단점 재개 활성화

$flag = $obj->download($file, $name, true)
  1. 코드 복사

test@ubuntu:~/Downloads$ wget -O test.rar http://demo.test.com/demo.php
--2013-06 -30 16:53:19-- http://demo.test.com/demo.php
    호스트 데모.test.com 확인 중... 127.0.0.1
  1. 데모.test.com에 연결 중| .0.1|:80... 연결되었습니다.
  2. HTTP 요청 전송됨, 응답 대기 중... 200 OK
  3. 길이: 10445120(10.0M) [application/octet-stream]
  4. 저장 위치: “test.rar”
  5. 20 % [==================> ] 2,097,720 516K/s 예상 시간 16초
  6. ^C
  7. test@ubuntu:~/Downloads$ wget - c -O test.rar http://demo.test.com/demo.php
  8. --2013-06-30 16:53:31-- http://demo.test.com/demo.php
  9. 해결 중 호스트 데모.test.com... 127.0.0.1
  10. 연결 중 데모.test.com|127.0.0.1|:80... 연결되었습니다.
  11. HTTP 요청 전송됨, 응답 대기 중... 206 부분 콘텐츠
  12. 길이: 10445121(10.0M), 7822971(7.5M) 남은 바이트 [application/octet-stream]
  13. 저장 위치: "test. rar"
  14. 100%[ =================================== === ======================================] 10,445,121 543K/s 14s
  15. 2013-06-30 16:53:45 (543 KB/s) - "test.rar" 저장됨 [10445121/10445121])
  16. 코드 복사
중단점 위치( )부터 다운로드가 시작되는 것을 확인할 수 있습니다.
출처: http://blog.csdn.net/phpfenghuo/article/details/46691865



성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
11 최고의 PHP URL 쇼트너 스크립트 (무료 및 프리미엄)11 최고의 PHP URL 쇼트너 스크립트 (무료 및 프리미엄)Mar 03, 2025 am 10:49 AM

종종 키워드와 추적 매개 변수로 혼란스러워하는 긴 URL은 방문자를 방해 할 수 있습니다. URL 단축 스크립트는 솔루션을 제공하여 소셜 미디어 및 기타 플랫폼에 이상적인 간결한 링크를 만듭니다. 이 스크립트는 개별 웹 사이트 a에 유용합니다

Instagram API 소개Instagram API 소개Mar 02, 2025 am 09:32 AM

Instagram은 2012 년 Facebook에서 유명한 인수에 이어 타사 사용을 위해 두 개의 API 세트를 채택했습니다. Instagram Graph API 및 Instagram Basic Display API입니다. 개발자는

Laravel의 플래시 세션 데이터로 작업합니다Laravel의 플래시 세션 데이터로 작업합니다Mar 12, 2025 pm 05:08 PM

Laravel은 직관적 인 플래시 방법을 사용하여 임시 세션 데이터 처리를 단순화합니다. 응용 프로그램에 간단한 메시지, 경고 또는 알림을 표시하는 데 적합합니다. 데이터는 기본적으로 후속 요청에만 지속됩니다. $ 요청-

Laravel Back End : Part 2, React가있는 React 앱 구축Laravel Back End : Part 2, React가있는 React 앱 구축Mar 04, 2025 am 09:33 AM

이것은 Laravel 백엔드가있는 React Application을 구축하는 데있어 시리즈의 두 번째이자 마지막 부분입니다. 이 시리즈의 첫 번째 부분에서는 기본 제품 목록 응용 프로그램을 위해 Laravel을 사용하여 편안한 API를 만들었습니다. 이 튜토리얼에서는 Dev가 될 것입니다

Laravel 테스트에서 단순화 된 HTTP 응답 조롱Laravel 테스트에서 단순화 된 HTTP 응답 조롱Mar 12, 2025 pm 05:09 PM

Laravel은 간결한 HTTP 응답 시뮬레이션 구문을 제공하여 HTTP 상호 작용 테스트를 단순화합니다. 이 접근법은 테스트 시뮬레이션을보다 직관적으로 만들면서 코드 중복성을 크게 줄입니다. 기본 구현은 다양한 응답 유형 단축키를 제공합니다. Illuminate \ support \ Facades \ http를 사용하십시오. http :: 가짜 ([ 'google.com'=> ​​'Hello World', 'github.com'=> ​​[ 'foo'=> 'bar'], 'forge.laravel.com'=>

PHP의 컬 : REST API에서 PHP Curl Extension 사용 방법PHP의 컬 : REST API에서 PHP Curl Extension 사용 방법Mar 14, 2025 am 11:42 AM

PHP 클라이언트 URL (CURL) 확장자는 개발자를위한 강력한 도구이며 원격 서버 및 REST API와의 원활한 상호 작용을 가능하게합니다. PHP CURL은 존경받는 다중 프로모토콜 파일 전송 라이브러리 인 Libcurl을 활용하여 효율적인 execu를 용이하게합니다.

Codecanyon에서 12 개의 최고의 PHP 채팅 스크립트Codecanyon에서 12 개의 최고의 PHP 채팅 스크립트Mar 13, 2025 pm 12:08 PM

고객의 가장 긴급한 문제에 실시간 인스턴트 솔루션을 제공하고 싶습니까? 라이브 채팅을 통해 고객과 실시간 대화를 나누고 문제를 즉시 해결할 수 있습니다. 그것은 당신이 당신의 관습에 더 빠른 서비스를 제공 할 수 있도록합니다.

2025 PHP 상황 조사 발표2025 PHP 상황 조사 발표Mar 03, 2025 pm 04:20 PM

2025 PHP Landscape Survey는 현재 PHP 개발 동향을 조사합니다. 개발자와 비즈니스에 대한 통찰력을 제공하는 프레임 워크 사용, 배포 방법 및 과제를 탐색합니다. 이 조사는 현대 PHP Versio의 성장을 예상합니다

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.