设为首页 加入收藏

TOP

php实现大文件断点续传下载实例(一)
2019-10-09 19:56:46 】 浏览:62
Tags:php 实现 文件 断点 下载 实例

php实现大文件断点续传下载实例,看完你就知道超过100M以上的大文件如何断点传输了,这个功能还是比较经典实用的,毕竟大文件上传功能经常用得到。

 1 require_once('download.class.php'); 
 2 date_default_timezone_set('Asia/Shanghai'); 
 3 error_reporting(E_STRICT); 
 4  
 5 function errorHandler($errno, $errstr, $errfile, $errline) { 
 6     echo '<p>error:', $errstr, '</p>'; 
 7     exit(); 
 8 } 
 9  
10 set_error_handler('errorHandler'); 
11 define('IS_DEBUG', true); 
12  
13 $filePath = 'test.zip'; 
14 $mimeType = 'audio/x-matroska'; 
15 $range = isset($_SERVER['HTTP_RANGE']) ? $_SERVER['HTTP_RANGE'] : null; 
16 if (IS_DEBUG) { 
17 //    $range = "bytes=1000-1999\n2000"; 
18 //    $range = "bytes=1000-1999,2000";  
19 //    $range = "bytes=1000-1999,-2000";  
20 //    $range = "bytes=1000-1999,2000-2999";  
21 } 
22 set_time_limit(0); 
23 $transfer = new Transfer($filePath, $mimeType, $range); 
24 if (IS_DEBUG) { 
25     $transfer->setIsLog(true); 
26 } 
27 $transfer->send();

download.class.php

  1 /** 
  2  * 文件传输,支持断点续传。 
  3  * 2g以上超大文件也有效 
  4  * @author MoXie 
  5  */ 
  6 class Transfer { 
  7  
  8     /** 
  9      * 缓冲单元 
 10      */ 
 11     const BUFF_SIZE = 5120; // 1024 * 5 
 12  
 13     /** 
 14      * 文件地址 
 15      * @var <String> 
 16      */ 
 17  
 18     private $filePath; 
 19  
 20     /** 
 21      * 文件大小 
 22      * @var <String> Php超大数字 字符串形式描述 
 23      */ 
 24     private $fileSize; 
 25  
 26     /** 
 27      * 文件类型 
 28      * @var <String> 
 29      */ 
 30     private $mimeType; 
 31  
 32     /** 
 33      * 请求区域(范围) 
 34      * @var <String> 
 35      */ 
 36     private $range; 
 37  
 38     /** 
 39      * 是否写入日志 
 40      * @var <Boolean> 
 41      */ 
 42     private $isLog = false; 
 43  
 44     /** 
 45      * 
 46      * @param <String> $filePath 文件路径 
 47      * @param <String> $mimeType  文件类型 
 48      * @param <String> $range 请求区域(范围) 
 49      */ 
 50     function __construct($filePath, $mimeType = null, $range = null) { 
 51         $this->filePath = $filePath; 
 52         $this->fileSize = sprintf('%u', filesize($filePath)); 
 53         $this->mimeType = ($mimeType != null) ? $mimeType : "application/octet-stream"; //  bin 
 54         $this->range = trim($range); 
 55     } 
 56  
 57     /** 
 58      *  获取文件区域 
 59      * @return <Map> {'start':long,'end':long} or null 
 60      */ 
 61     private function getRange() { 
 62         /** 
 63          *  Range: bytes=-128 
 64          *  Range: bytes=-128 
 65          *  Range: bytes=28-175,382-399,510-541,644-744,977-980 
 66          *  Range: bytes=28-175\n380 
 67          *  type 1 
 68          *  RANGE: bytes=1000-9999 
 69          *  RANGE: bytes=2000-9999 
 70          *  type 2 
 71          *  RANGE: bytes=1000-1999 
 72          *  RANGE: bytes=2000-2999 
 73          *  RANGE: bytes=3000-3999 
 74          */ 
 75         if (!empty($this->range)) { 
 76             $range = preg_replace('/[\s|,].*/', '', $this->range); 
 77             $range = explode('-', substr($range, 6)); 
 78             if (count($range) < 2) { 
 79                 $range[1] = $this->fileSize; // Range: bytes=-100 
 80             } 
 81             $range = array_combine(array('start', 'end'), $range); 
 82             if (empty($range['start'])) { 
 83                 $range['start'] = 0; 
 84             } 
 85             if (!isset($range['end']) || empty($range['end'])) { 
 86                 $range['end'] = $this->fileSize; 
 87             } 
 88             return $range; 
 89         } 
 90         return null; 
 91     } 
 92  
 93     /** 
 94      * 向客户端发送文件 
 95      */ 
 96     public function send() { 
 97         $fileHande = fopen($this->filePath, 'rb'); 
 98         if ($fileHande) { 
 99             // setting 
100             ob_end_clean(); // clean cache 
101             ob_start(); 
102             ini_set('output_buffering', 'Off'); 
103             ini_set('zlib.output_compression', 'Off'); 
104             $magicQuotes = get_magic_quotes_gpc(); 
105 //            set
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇[视频教程] 使用composer安装使用.. 下一篇php配置文件说明

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目