PHP断点续传-HTTP

  <?php

  /**

  * PHP-HTTP断点续传实现

  * @param string $path: 文件所在路径

  * @param string $file: 文件名

  * @return void

  */

  function download($path,$file) {

  $real = $path.'/'.$file;

  if(!file_exists($real)) {

  return false;

  }

  $size = filesize($real);

  $size2 = $size-1;

  $range = 0;

  if(isset($_SERVER['HTTP_RANGE'])) {

  header('HTTP /1.1 206 Partial Content');

  $range = str_replace('=','-',$_SERVER['HTTP_RANGE']);

  $range = explode('-',$range);

  $range = trim($range[1]);

  header('Content-Length:'.$size);

  header('Content-Range: bytes '.$range.'-'.$size2.'/'.$size);

  } else {

  header('Content-Length:'.$size);

  header('Content-Range: bytes 0-'.$size2.'/'.$size);

  }

  header('Accenpt-Ranges: bytes');

  header('application/octet-stream');

  header("Cache-control: public");

  header("Pragma: public");

  //解决在IE中下载时中文乱码问题

  $ua = $_SERVER['HTTP_USER_AGENT'];

  if(preg_match('/MSIE/',$ua)) {

  $ie_filename = str_replace('+','%20',urlencode($file));

  header('Content-Dispositon:attachment; filename='.$ie_filename);

  } else {

  header('Content-Dispositon:attachment; filename='.$file);

  }

  $fp = fopen($real,'rb+');

  fseek($fp,$range);

  while(!feof($fp)) {

  set_time_limit(0);

  print(fread($fp,1024));

  flush();

  ob_flush();

  }

  fclose($fp);

  }

  /*End of PHP*/

时间: 2025-01-02 10:29:02

PHP断点续传-HTTP的相关文章

断点续传-请问perl是否可以改写nginx服务器得到的POST请求地址,并且不能丢失post的数据

问题描述 请问perl是否可以改写nginx服务器得到的POST请求地址,并且不能丢失post的数据 场景:后端JAVA应用作了一个断点续传的功能,测试OK,由于一些环境限制原因,前端必须用nginx转发.坑爹的是nginx的rewrite功能会把post请求变为get请求,如果使用 proxy pass则会出现如果用户上传中断,nginx不会把已经上传的东西扔给后端应用 现在考虑方向是改写post请求的链接(改成IP加端口)但是不更改别的东西,比如post的数据,方法等等,或者干脆收到此种请求

利用Winsock下载文件(支持断点续传)

下载 第一步,建立工程,引用Winsock(Visual Basic最好打SP6,否则MS有一个Bug),在此省略 第二步,具体实现代码步骤1:发送请求说明:(1)这里简单采用了判断是否已经有同名文件表示是否要断点续传(2)下载的地址,大小和已下载字节数也只是简单地存在ini文件中,更安全的做法本文不作讨论有兴趣的朋友可以联系我 '--------------------------------------------------------------------------------'  

用Java实现断点续传

(一)断点续传的原理 其实断点续传的原理很简单,就是在Http的请求上和一般的下载有所不同而已.打个比方,浏览器请求服务器上的一个文时,所发出的请求如下:假设服务器域名为wwww.sjtu.edu.cn,文件名为down.zip.GET /down.zip HTTP/1.1Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, applic

AS3断点续传应用

前言 借用FP10支持的FileReference.load()方法获取本地数据..然后使用byteArray把数据分成指定大小的小块..分别上传..达到断点续传的功能.. 分析 第一步:加载文件(FileReference,FileReference.load()) 第二步:向服务器请求已经上传数据量(文件标识,URLLoader) 第三步:由返回的数据位置开始上传.. 效果   PS:由于服务端只用了名字+尺寸为标识..所以同一文件上传后再上传即提示上传完毕,另外空间限制-只保留最后10个文

带进度条的ASP无组件断点续传下载

无组件|下载 <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%> <%Option Explicit%> <% '================================== ''带进度条的ASP无组件断点续传下载 ''================================== '简介: '1)利用xmlhttp方式 '2)无组件 '3)异步方式获取,节省服务器资源 '4)服务器到服务器的文

让自定义文件下载支持断点续传(HTTP

ado|stream|下载 自定义文件下载基本上用在以下几处 1.浏览器已知类型,如Avi,Doc等如果本地安装了关联程序就会自动在浏览器上打开2.权限管理,有时候不是所有的人都允许下载,所以需要在下载的时候进行判断3.经常需要将特殊文件搁到虚拟目录访问不到的地方,以及asp和asa等文件的下载 大家经常用的是Adodb.Stream,但这时就有个缺陷,就是不支持断点续传了.经常看到flashget中是红脸(即不支持断点续传)其实支持断点续传也很简单.如下:利用读取HTTP_RANGE,然后对A

安全下载与断点续传

安全|下载 快速搞定文件下载头部输出 header("Content-type: application/x-download"); header("Content-Disposition: attachment; filename=$file_download_name;"); header("Accept-Ranges: bytes"); header("Content-Length: $download_size");e

非C#的文章,不过大家可以借鉴一下其中思想--用Java实现断点续传(HTTP)

用Java实现断点续传(HTTP)        内容: (一)断点续传的原理 (二)Java实现断点续传的关键几点 (三)断点续传内核的实现 关于作者 钟华 (zhong_hua@263.net)2001 年 5 月 (一)断点续传的原理其实断点续传的原理很简单,就是在Http的请求上和一般的下载有所不同而已.打个比方,浏览器请求服务器上的一个文时,所发出的请求如下:假设服务器域名为wwww.sjtu.edu.cn,文件名为down.zip.GET /down.zip HTTP/1.1Acce

让自定义文件下载支持断点续传

自定义文件下载基本上用在以下几处 1.浏览器已知类型,如Avi,Doc等如果本地安装了关联程序就会自动在浏览器上打开2.权限管理,有时候不是所有的人都允许下载,所以需要在下载的时候进行判断3.经常需要将特殊文件搁到虚拟目录访问不到的地方,以及asp和asa等文件的下载 大家经常用的是Adodb.Stream,但这时就有个缺陷,就是不支持断点续传了.经常看到flashget中是红脸(即不支持断点续传)其实支持断点续传也很简单.如下:利用读取HTTP_RANGE,然后对Adodb.Stream进行定