php 支持断点续传的文件下载类

php支持断点续传的文件下载类 PHP下载类,支持断点续传。 HTTP断点续传原理 Http头 Range、Content-Range() HTTP头中一般断点下载时才用到Range和Content-Range实体头, Range用户请求头中,指定第一个字节的位置和最后一个字节的位置,如(Range:200-300) Content-Range用于响应头 立即下载
php 支持断点续传,主要依靠HTTP协议中 header HTTP_RANGE实现。

HTTP断点续传原理
Http头 Range、Content-Range()
HTTP头中一般断点下载时才用到Range和Content-Range实体头,
Range用户请求头中,指定第一个字节的位置和最后一个字节的位置,如(Range:200-300)
Content-Range用于响应头

请求下载整个文件: 
GET /test.rar HTTP/1.1 
Connection: close 
Host: 116.1.219.219 
Range: bytes=0-801 //一般请求下载整个文件是bytes=0- 或不用这个头

一般正常回应 
HTTP/1.1 200 OK 
Content-Length: 801      
Content-Type: application/octet-stream 
Content-Range: bytes 0-800/801 //801:文件总大小

FileDownload.class.php
  1. <?php  
  2. /** php下载类,支持断点续传 
  3. *   Date:   2013-06-30 
  4. *   Author: fdipzone 
  5. *   Ver:    1.0 
  6. * 
  7. *   Func: 
  8. *   download: 下载文件 
  9. *   setSpeed: 设置下载速度 
  10. *   getRange: 获取header中Range 
  11. */  
  12.   
  13. class FileDownload{ // class start  
  14.   
  15.     private $_speed = 512;   // 下载速度  
  16.   
  17.   
  18.     /** 下载 
  19.     * @param String  $file   要下载的文件路径 
  20.     * @param String  $name   文件名称,为空则与下载的文件名称一样 
  21.     * @param boolean $reload 是否开启断点续传 
  22.     */  
  23.     public function download($file, $name='', $reload=false){  
  24.         if(file_exists($file)){  
  25.             if($name==''){  
  26.                 $name = basename($file);  
  27.             }  
  28.   
  29.             $fp = fopen($file, 'rb');  
  30.             $file_size = filesize($file);  
  31.             $ranges = $this->getRange($file_size);  
  32.   
  33.             header('cache-control:public');  
  34.             header('content-type:application/octet-stream');  
  35.             header('content-disposition:attachment; filename='.$name);  
  36.   
  37.             if($reload && $ranges!=null){ // 使用续传  
  38.                 header('HTTP/1.1 206 Partial Content');  
  39.                 header('Accept-Ranges:bytes');  
  40.                   
  41.                 // 剩余长度  
  42.                 header(sprintf('content-length:%u',$ranges['end']-$ranges['start']));  
  43.                   
  44.                 // range信息  
  45.                 header(sprintf('content-range:bytes %s-%s/%s', $ranges['start'], $ranges['end'], $file_size));  
  46.                   
  47.                 // fp指针跳到断点位置  
  48.                 fseek($fp, sprintf('%u', $ranges['start']));  
  49.             }else{  
  50.                 header('HTTP/1.1 200 OK');  
  51.                 header('content-length:'.$file_size);  
  52.             }  
  53.   
  54.             while(!feof($fp)){  
  55.                 echo fread($fp, round($this->_speed*1024,0));  
  56.                 ob_flush();  
  57.                 //sleep(1); // 用于测试,减慢下载速度  
  58.             }  
  59.   
  60.             ($fp!=null) && fclose($fp);  
  61.   
  62.         }else{  
  63.             return '';  
  64.         }  
  65.     }  
  66.   
  67.   
  68.     /** 设置下载速度 
  69.     * @param int $speed 
  70.     */  
  71.     public function setSpeed($speed){  
  72.         if(is_numeric($speed) && $speed>16 && $speed<4096){  
  73.             $this->_speed = $speed;  
  74.         }  
  75.     }  
  76.   
  77.   
  78.     /** 获取header range信息 
  79.     * @param  int   $file_size 文件大小 
  80.     * @return Array 
  81.     */  
  82.     private function getRange($file_size){  
  83.         if(isset($_SERVER['HTTP_RANGE']) && !empty($_SERVER['HTTP_RANGE'])){  
  84.             $range = $_SERVER['HTTP_RANGE'];  
  85.             $range = preg_replace('/[\s|,].*/', '', $range);  
  86.             $range = explode('-', substr($range, 6));  
  87.             if(count($range)<2){  
  88.                 $range[1] = $file_size;  
  89.             }  
  90.             $range = array_combine(array('start','end'), $range);  
  91.             if(empty($range['start'])){  
  92.                 $range['start'] = 0;  
  93.             }  
  94.             if(empty($range['end'])){  
  95.                 $range['end'] = $file_size;  
  96.             }  
  97.             return $range;  
  98.         }  
  99.         return null;  
  100.     }  
  101.   
  102. } // class end  
  103.   
  104. ?>  
demo
  1. <?php  
  2.   
  3. require('FileDownload.class.php');  
  4. $file = 'book.zip';  
  5. $name = time().'.zip';  
  6. $obj = new FileDownload();  
  7. $flag = $obj->download($file, $name);  
  8. //$flag = $obj->download($file, $name, true); // 断点续传  
  9.   
  10. if(!$flag){  
  11.     echo 'file not exists';  
  12. }  
  13.   
  14. ?>  
断点续传测试方法:
使用linux wget命令去测试下载, wget -c -O file http://xxx

1.先关闭断点续传
$flag = $obj->download($file, $name);

  1. fdipzone@ubuntu:~/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. 正在解析主机 demo.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.   
  9. 30% [============================&gt;                                                                     ] 3,146,580    513K/s  估时 14s  
  10. ^C  
  11. fdipzone@ubuntu:~/Downloads$ wget -c -O test.rar http://demo.fdipzone.com/demo.php  
  12. --2013-06-30 16:52:57--  http://demo.fdipzone.com/demo.php  
  13. 正在解析主机 demo.fdipzone.com... 127.0.0.1  
  14. 正在连接 demo.fdipzone.com|127.0.0.1|:80... 已连接。  
  15. 已发出 HTTP 请求,正在等待回应... 200 OK  
  16. 长度: 10445120 (10.0M) [application/octet-stream]  
  17. 正在保存至: “test.rar”  
  18.   
  19. 30% [============================&gt;                                                                     ] 3,146,580    515K/s  估时 14s  
  20. ^C  
  21.   
  22. 可以看到,wget -c不能断点续传  

2.开启断点续传
$flag = $obj->download($file, $name, true);

  1. fdipzone@ubuntu:~/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. 正在解析主机 demo.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.   
  9. 20% [==================&gt;                                                                               ] 2,097,720    516K/s  估时 16s  
  10. ^C  
  11. fdipzone@ubuntu:~/Downloads$ wget -c -O test.rar http://demo.fdipzone.com/demo.php  
  12. --2013-06-30 16:53:31--  http://demo.fdipzone.com/demo.php  
  13. 正在解析主机 demo.fdipzone.com... 127.0.0.1  
  14. 正在连接 demo.fdipzone.com|127.0.0.1|:80... 已连接。  
  15. 已发出 HTTP 请求,正在等待回应... 206 Partial Content  
  16. 长度: 10445121 (10.0M),7822971 (7.5M) 字节剩余 [application/octet-stream]  
  17. 正在保存至: “test.rar”  
  18.   
  19. 100%[++++++++++++++++++++++++=========================================================================&gt;] 10,445,121   543K/s   花时 14s     
  20.   
  21. 2013-06-30 16:53:45 (543 KB/s) - 已保存 “test.rar” [10445121/10445121])  
  22.   
  23. 可以看到会从断点的位置(%20)开始下载。 

PHP断点续传,亲测可用 PHP断点续传,亲测可用, 从网上找的代码,测试后发现上传的文件名称中文乱码,已修复。 立即下载

相关推荐

php实现大文件断点续传下载实例代码

主要介绍了php实现大文件断点续传下载实例,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下

PHP实现断点续传大文件

参考文章:http://blog.ncmem.com/wordpress/2023/09/19/php%e5%ae%9e%e7%8e%b0%e6%96%ad%e7%82%b9%e7%bb%ad%e4%bc%a0%e5%a4%a7%e6%96%87%e4%bb%b6/在以前版本的 HTTP 协议是不支持断点的,HTTP/1.1 开始就支持了。这一行的意思就是告诉服务器down.zip这个文件从2000070字节开始传,前面的字节不用传了。知道了以上原理,就可以进行断点续传的编程了。

weixin_45525177的博客 448

构造地貌研究入门:手把手教你用ArcGIS插件CalHypso分析流域地貌形态

本文详细介绍了如何使用ArcGIS插件CalHypso进行流域地貌形态分析,包括工具安装、数据预处理、HI曲线生成及结果解读等关键步骤。通过实战操作,帮助读者掌握面积高程积分(HI)曲线的应用技巧,为构造地貌研究提供量化工具。

weixin_33704234的博客 104

PHP----下载断点后续传

代码: <?php function dl_file_resume($file){        //检测文件是否存在     if (!is_file($file)) { die("404 File not found!"); }                     $len = filesize($file);//获取文件大小     $filename = basename(

Damys 542

1. Klipper从安装到运行

本文记录Klipper固件从安装,配置到运行的详细过程

weixin_42098934的博客 1万+

LSTM+Transformer混合模型时间序列预测实战教学

LSTM+Transformer混合模型时间序列预测实战教学 毕业设计

8218

断点续传

想实现断点续传,特别是网络不畅的情况下适用。

qq_18746961的博客 567

基于 Simulink 的三相四线制整流器在三相不平衡负载下的中点电位平衡控制实战教程。

本文介绍了三相四线制整流器在不平衡负载下的中点电位平衡控制方法。首先分析了中点电位漂移的物理机理和控制策略(零序电压注入)。接着详细讲解了Simulink建模步骤:搭建三相四线制主电路、设计平衡控制算法、实现PWM调制。通过对比有无平衡控制的仿真结果,验证了控制方法的有效性。最后提供了工程建议:零序注入需限幅、考虑中性线寄生电感影响、采用稳健的PI参数。该方案能有效抑制中点电位波动,保障三电平系统在不平衡工况下的稳定运行。

MHD0815的博客 60

【PHP高性能文件传输指南】:从零构建支持断点续传的大文件下载系统

掌握PHP大文件下载接口的高效实现方法,解决大文件传输卡顿、中断难题。适用于视频、软件等大资源下载场景,支持断点续传与内存优化,提升服务器稳定性与用户体验。构建高性能文件传输系统,值得收藏。

VarPerch的博客 848

PDBfixer:蛋白质结构修复工具

本文介绍蛋白质数据银行(PDB)文件常见问题及修复工具PDBFixer的使用方法。PDB文件常存在缺失原子、残基等问题,PDBFixer可通过GUI、命令行或Python API实现自动化修复。文章详细说明安装方法、命令行参数、Python脚本修复流程及非标准残基替换表,并与Modeller、ColabFold和Rosetta Remodel等其他修复工具进行对比分析,提供了各工具的特点、适用场景和典型计算时间比较,帮助用户根据具体需求选择合适的修复工具。

Protein Designer的博客 610

Qt之自定义带游标的QSlider

最近翻看6年前写了一篇关于QSlider的博客:Qt自定义带游标的slider,在滑块正上方显示当前值 发现存在很多问题,比如游标的坐标不准确;如果游标宽度稍大,滑到Slider最左或最右的时候会显示不全;游标不够美观。 PS:这里有个漂亮的Slider样式表https://blog.youkuaiyun.com/caoshangpa/article/details/53389517于是今天再实现了一遍,依然是子类化QSlider,效果如下,支持设置游标的尺寸:这一次的实现比之前简洁很多,只需要重新paintEvent

草上爬的博客 6278

PHP让文件下载支持断点续传的程序代码、PHP带cookie执行curl以模拟登录状态 及 nginx调试时如何输出内容到网页及头信息

断点续传是下载中的概念,即下载中断后下次再下载时可以从上次中断的地方接着下载,而不用重新开始下载。在PHP的程序代码里唯一要变化的就是下载起始点,重新开始下载是0,断点续传时则要传入起始下载点,php支持断点续传,是依靠HTTP协议中中的HTTP_RANGE实现(HTTP/1.1 开始支持)。

本博客记录了从2014年以来在工作学习中遇到的技术问题、解决方法以及部分个人人生经历、经验等内容。 385

结构力学本构模型:复合材料模型:复合材料热力学行为技术教程_2024-08-07_06-54-53.Tex

热塑性复合材料是一种由热塑性树脂基体和增强纤维组成的复合材料。与热固性复合材料不同,热塑性复合材料在加热时可以软化,冷却时硬化,这一过程可以重复进行,因此它们具有可回收和可再加工的特性。热塑性树脂,如聚酰胺(尼龙)、聚碳酸酯、聚醚醚酮(PEEK)等,与碳纤维、玻璃纤维等增强材料结合,可以制备出具有高强度、高刚度和良好耐热性的复合材料。热粘弹性理论是研究材料在温度变化和时间依赖性载荷作用下的变形和应力响应。复合材料,由于其独特的微观结构,展现出复杂的热粘弹性行为。

808

php实现的支持断点续传的文件下载类

本文实例讲述了php实现的支持断点续传的文件下载类及其用法,是非常实用的技巧。分享给大家供大家参考。具体方法如下: 通常来说,php支持断点续传,主要依靠HTTP协议中 header HTTP_RANGE实现。

NiceGY 2202

uniapp - 热更新提示:WGT安装包中manifest.json文件不存在 | unexpected EOF!报错详细解决,完美搞定WGT安装包中WWW目录下manifest.json不存在问题

uniapp,安卓android,苹果ios,热更新,热更新code:-1202报错,,WGT热更新报错,uniapp热更新wgt出现报错manifest.json文件不存,uniapp安卓苹果软件热更新时出现错误unexpected EOF!如何解决,怎么解决热更新wgt报错,app新版本下载安装报错WGT安装包中manifest.json文件不存在,WGT安装包中WWW目录下manifest.json不存在,uniapp热更新报错安装失败[-1201]:WGT/WGTU文件格式错误,uniapp-wgt

✅ 精选推荐文章 1万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

php文件断点续传,php实现的支持断点续传的文件下载类

本文实例讲述了php实现的支持断点续传的文件下载类及其用法,是非常实用的技巧。分享给大家供大家参考。具体方法如下:通常来说,php支持断点续传,主要依靠HTTP协议中 header HTTP_RANGE实现。HTTP断点续传原理:Http头 Range、Content-Range()HTTP头中一般断点下载时才用到Range和Content-Range实体头,Range用户请求头中,指定第一个字节...

weixin_39789370的博客 154

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

php 断点续传,php支持断点续传的文件下载类(附源码)

/** php下载类,支持断点续传* Date: 2013-06-30* Author: fdipzone* Ver: 1.0* edit: ww.jbxue.com* Func:* download: 下载文件* setSpeed: 设置下载速度* getRange: 获取header中Range*/class FileDownload{ // clas...

weixin_32147807的博客 180

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

php服务器支持断点续传,php实现的支持断点续传的文件下载类

本文实例讲述了php实现的支持断点续传的文件下载类及其用法,是非常实用的技巧。分享给大家供大家参考。具体方法如下:通常来说,php支持断点续传,主要依靠HTTP协议中 header HTTP_RANGE实现。HTTP断点续传原理:Http头 Range、Content-Range()HTTP头中一般断点下载时才用到Range和Content-Range实体头,Range用户请求头中,指定第一个字节...

weixin_32390279的博客 184

php断点续传下载,php 支持断点续传的文件下载类

php 支持断点续传,主要依靠HTTP协议中 header HTTP_RANGE实现。HTTP断点续传原理Http头 Range、Content-Range()HTTP头中一般断点下载时才用到Range和Content-Range实体头,Range用户请求头中,指定第一个字节的位置和最后一个字节的位置,如(Range:200-300)Content-Range用于响应头请求下载整个文件:GET /...

weixin_29040367的博客 135

支持断点续传的PHP文件下载类

PHP下载远程文件类(支持断点续传)

2482

php 支持断点下载,支持断点续传的下载文件的php类

简介:classHttpDownload{private$m_url="";private$m_urlpath="";private$m_scheme="http";private$m_host="";private$m_port="80";private$m_user="";private$m_pass="";private$m_path="/...

weixin_39963440的博客 128

php 文件下载 断点续传,php 支持断点续传的文件下载类

fdipzone@ubuntu:~/Downloads$wget-Otest.rarhttp://demo.fdipzone.com/demo.php--2013-06-3016:53:19--http://demo.fdipzone.com/demo.php正在解析主机demo.fdipzone.com...127.0.0.1正在连接demo.fdipzone.com|127...

weixin_33520849的博客 86
上一篇: 写shell脚本调用php文件
下一篇: PHP超大文件下载,断点续传下载
允哥
博客等级 码龄11年 17粉丝 93原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值