>  기사  >  백엔드 개발  >  중단점 이력서 전송을 지원하는 PHP 파일 다운로드 클래스(소스코드 첨부)

중단점 이력서 전송을 지원하는 PHP 파일 다운로드 클래스(소스코드 첨부)

WBOY
WBOY원래의
2016-07-25 08:55:241063검색
  1. /**PHP 다운로드 클래스, 중단점 재개 다운로드 지원
  2. * 날짜: 2013-06-30
  3. * 작성자: fdipzone
  4. * 버전: 1.0
  5. * 편집: ww.jbxue.com
  6. * Func:
  7. * download: 파일 다운로드
  8. * setSpeed: 다운로드 속도 설정
  9. * getRange: 헤더에서 범위 가져오기
  10. */
  11. class FileDownload{ // 수업 시작
  12. 비공개 $_speed = 512; // 다운로드 속도
  13. /**Download
  14. * @param String $file 다운로드할 파일 경로
  15. * @param String $name 파일명, 비어 있으면 다운로드한 파일명과 동일
  16. * @param boolean $reload 중단점 연속 통과 활성화 여부
  17. */
  18. 공개 함수 다운로드($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 = 파일 크기($file);
  25. $ranges = $this->getRange($file_size);
  26. header('cache-control:public');
  27. header('콘텐츠 유형:응용 프로그램/옥텟-스트림');
  28. header('content-disposition:attachment; 파일 이름='.$name);
  29. if($reload && $ranges!=null){ // 사용예제
  30. header('HTTP/1.1 206 부분 콘텐츠');
  31. header('Accept-Ranges:bytes');
  32. // 剩余长titude
  33. header(sprintf('content-length:%u',$ranges['end']-$ranges['start']));
  34. // 범위 제한
  35. header(sprintf('content-range:bytes %s-%s/%s', $ranges['start'], $ranges['end'], $ 파일_크기));
  36. // fp指针跳到断点位置
  37. fseek($fp, sprintf('%u', $ranges['start']));
  38. }else{
  39. header('HTTP/1.1 200 OK');
  40. header('content-length:'.$file_size);
  41. }
  42. while(!feof($fp)){
  43. echo fread($fp, round($this->_speed*1024,0));
  44. ob_flush();
  45. //수면(1); // 于测试,减慢下载速degree
  46. }
  47. ($fp!=null) && fclose($fp);
  48. }else{
  49. return '';
  50. }
  51. }
  52. /**다운로드 속도 설정
  53. * @param int $speed
  54. */
  55. 공개 함수 setSpeed($speed){
  56. if(is_numeric($speed) && $speed>16 && $ 속도<4096){
  57. $this->_speed = $speed;
  58. }
  59. }
  60. /**헤더 범위 정보 가져오기
  61. * @param int $file_size 파일 크기
  62. * @return Array
  63. */
  64. 비공개 함수 getRange($file_size){
  65. if(isset($_SERVER['HTTP_RANGE']) && ! 비어있음($_SERVER['HTTP_RANGE'])){
  66. $range = $_SERVER['HTTP_RANGE'];
  67. $range = preg_replace('/[s|,].*/', '', $range);
  68. $range =explod('-', substr($range, 6));
  69. if(count($range)<2){
  70. $range[1] = $file_size;
  71. }
  72. $range = array_combine(array('start','end'), $range);
  73. if(empty($range['start'])){
  74. $range['start'] = 0;
  75. }
  76. if(empty($range['end'])){
  77. $range['end'] = $file_size;
  78. }
  79. return $range;
  80. }
  81. null을 반환합니다.
  82. }
  83. } // 수업 종료
  84. ?>
复代码

2,演示示例 데모. PHP

  1. require('FileDownload.class.php');
  2. $file = 'book.zip';
  3. $name = 시간().'.zip';
  4. $obj = new FileDownload();
  5. $flag = $obj->download($file, $name);
  6. //$flag = $obj->download($file, $name, true); // 断点续传
  7. if(!$flag){
  8. echo '파일이 없습니다';
  9. }
  10. ?>
复代代码

断点续传测试방법: 使用linux wget命令去测试下载, wget -c -O 파일 http://xxx

1,先关闭断点续传

  1. $flag = $obj->download($file, $name);
复主代码

wget 명령을 사용하여 중단점 재개를 테스트합니다.

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

wget -c가 중단점에서 업로드를 재개할 수 없음을 알 수 있습니다.

2. 중단점 재개를 활성화합니다.

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

wget 명령을 사용하여 재개 기능을 테스트합니다.

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

중단점 위치( )부터 다운로드가 시작되는 것을 확인할 수 있습니다.

PHP 파일 다운로드 클래스의 소스코드 다운로드 주소 첨부(브레이크포인트 이력서 다운로드 지원)



성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.