代码:

<?php
function dl_file_resume($file){ //检测文件是否存在 if (!is_file($file)) { die("<b>404 File not found!</b>"); } $len = filesize($file);//获取文件大小 $filename = basename($file);//获取文件名字 $file_extension = strtolower(substr(strrchr($filename,"."),1));//获取文件扩展名 //根据扩展名 指出输出浏览器格式 switch( $file_extension ) { case "exe": $ctype="application/octet-stream"; break; case "zip": $ctype="application/zip"; break; case "mp3": $ctype="audio/mpeg"; break; case "mpg":$ctype="video/mpeg"; break; case "avi": $ctype="video/x-msvideo"; break; default: $ctype="application/force-download"; } //Begin writing headers header("Cache-Control:"); header("Cache-Control: public"); //设置输出浏览器格式 header("Content-Type: $ctype"); if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")) {//如果是IE浏览器 # workaround for IE filename bug with multiple periods / multiple dots in filename # that adds square brackets to filename - eg. setup.abc.exe becomes setup[1].abc.exe $iefilename = preg_replace('/\./', '%2e', $filename, substr_count($filename, '.') - 1); header("Content-Disposition: attachment; filename=\"$iefilename\""); } else { header("Content-Disposition: attachment; filename=\"$filename\""); } header("Accept-Ranges: bytes"); $size=filesize($file); //如果有$_SERVER['HTTP_RANGE']参数 if(isset($_SERVER['HTTP_RANGE'])) {
/*   --------------------------- Range头域   Range头域可以请求实体的一个或者多个子范围。例如,   表示头500个字节:bytes=0-499   表示第二个500字节:bytes=500-999   表示最后500个字节:bytes=-500   表示500字节以后的范围:bytes=500-   第一个和最后一个字节:bytes=0-0,-1   同时指定几个范围:bytes=500-600,601-999   但是服务器可以忽略此请求头,如果无条件GET包含Range请求头,响应会以状态码206(PartialContent)返回而不是以200 (OK)。 ---------------------------*/// 断点后再次连接 $_SERVER['HTTP_RANGE'] 的值 bytes=4390912- list($a, $range)=explode("=",$_SERVER['HTTP_RANGE']); //if yes, download missing part str_replace($range, "-", $range);//这句干什么的呢。。。。 $size2=$size-1;//文件总字节数 $new_length=$size2-$range;//获取下次下载的长度 header("HTTP/1.1 206 Partial Content"); header("Content-Length: $new_length");//输入总长 header("Content-Range: bytes $range$size2/$size");//Content-Range: bytes 4908618-4988927/4988928   95%的时候 } else {//第一次连接 $size2=$size-1; header("Content-Range: bytes 0-$size2/$size"); //Content-Range: bytes 0-4988927/4988928 header("Content-Length: ".$size);//输出总长 } //打开文件 $fp=fopen("$file","rb"); //设置指针位置 fseek($fp,$range); //虚幻输出 while(!feof($fp)){ //设置文件最长执行时间 set_time_limit(0); print(fread($fp,1024*8));//输出文件 flush();//输出缓冲 ob_flush(); } fclose($fp); exit;
} dl_file_resume("1.zip");//同级目录的1.zip 文件 //---------------------------------------//不支持断点续传的文件下载。 //---------------------------------------downFile("1.zip"); function downFile($sFilePath)
{ if(file_exists($sFilePath)){ $aFilePath=explode("/",str_replace("\\","/",$sFilePath),$sFilePath); $sFileName=$aFilePath[count($aFilePath)-1]; $nFileSize=filesize ($sFilePath); header ("Content-Disposition: attachment; filename=" . $sFileName); header ("Content-Length: " . $nFileSize); header ("Content-type: application/octet-stream"); readfile($sFilePath); } else{ echo("文件不存在!"); }
}
?>

PHP----下载断点后续传相关推荐

  1. Akka实战:HTTP大文件断点上传、下载,秒传

    2019独角兽企业重金招聘Python工程师标准>>> 访问:https://github.com/yangbajing/scala-applications/tree/master ...

  2. java断点上传下载_java实现多线程断点续传,上传下载 分享

    程序采用的ftp工具, apache 的 commons-net-ftp-ftpclient package com.ftp; import java.io.File; import java.io. ...

  3. JS 超大文件上传解决方案:分片断点上传(一)

    之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...

  4. 网络编程学习(10)/ FTP项目(4) ——文件下载和下载断点续存功能

    网络编程学习(10)/ FTP项目(4) --文件下载和下载断点续存功能 服务端 `lib 文件夹下 main.py` 客户端 `client文件夹下 FTPClient.py 代码 interact ...

  5. 超大文件上传解决方案:分片断点上传

    之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...

  6. asp.net 如何实现大文件断点上传功能?

    之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...

  7. java 断点上传_java HTTP文件断点上传

    之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...

  8. 超大文件上传下载以及秒传、提速和限速方案完整(包含前后端)

    前言 文件上传是一个老生常谈的话题了,在文件相对比较小的情况下,可以直接把文件转化为字节流上传到服务器,但在文件比较大的情况下,用普通的方式进行上传,这可不是一个好的办法,毕竟很少有人会忍受,当文件上 ...

  9. 分析腾讯QQ网页文件断点上传

    关于文件的断点上传,网上的很多例子,有好有坏吧.最失望的是,在知网下载了十篇论文,感觉都是在瞎扯淡,目测是大学生的毕业设计吧,反正很失望. 主要是剖析了腾讯邮箱的文件上传,发现和我自己实现的大致相同, ...

最新文章

  1. java字符串反转方法【全】
  2. Partial Sums ZOJ - 1569
  3. CentOS7 命令行变成-bash-4.2$
  4. 菜鸟做设计必看!有关如何做设计的整体思路,以及能否综合的笔记
  5. 如何在Lua与C/C++之间实现table数据的交换
  6. C++中的namespace ----转载
  7. asp服务器_Asp.Net Core2.2从环境配置到应用建立
  8. python colorbar设置大小及位置_matplotlib colorbar更改轴大小
  9. linux7.7 离线安装nfs客户端_Linux提权姿势二:利用NFS提权
  10. photoshop cc 2017 mac 破解版
  11. 亲密接触Redis-第一天
  12. 有哪些高质量的图片网站(社区)推荐?
  13. 立创eda学习笔记二:画pcb板流程(极简入门版)
  14. js 获取某一天的前一天时间或者后一天时间
  15. Android+刷固件,(57M2)海信ip906h强刷系统安卓固件包及刷机教材
  16. BiLSTM+CRF实现AI诗人与长短记忆网络
  17. Windows系统:开始--运行--命令大全
  18. 处理中文乱码和中文部分乱码
  19. win10 桌面新建文件夹、重命名文件、删除文件及复制文件不能自动刷新问题的解决
  20. GPU与CPU的性能比较及影响因素

热门文章

  1. 计算机桌面图标变成腾讯图标,如果无法在Windows 10桌面上找到腾讯计算机管理器图标,该怎么办?...
  2. moto x android 6.0,MOTOXPRO升级安卓6.0
  3. MDaemon架设邮件服务器案例
  4. mysql从库设置为只读
  5. 如何利用苹果镜像功能简单投屏到电脑
  6. 拼多多商家一定不要踩这几个坑,坑坑致命!
  7. Android最全炫酷UI
  8. 2017计算机系书单分享
  9. python 人脸提取_Python 自动提取电影中所有人脸
  10. 腾讯云短信服务实现短信验证功能