/服务器文件路径,下载文件名字(默认为服务器文件名),是否许可用户下载方式(默认可选),速度限制(默认自动),文件类型(默认所有) 可能是服务器原因 配置较低 下载一段服务器会崩溃 下载也会停止/
public function downFile($fileName, $fancyName = '', $forceDownload = true, $speedLimit = 0, $contentType = '') { 
if (!is_readable($fileName)) 

header("HTTP/1.1 404 Not Found"); 
return false; 
}

$fileStat = stat($fileName);
$lastModified = $fileStat['mtime']; $md5 = md5($fileStat['mtime'] .'='. $fileStat['ino'] .'='. $fileStat['size']);
$etag = '"' . $md5 . '-' . crc32($md5) . '"'; header('Last-Modified: ' . gmdate("D, d M Y H:i:s", $lastModified) . ' GMT');
header("ETag: $etag"); if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) >= $lastModified)
{ header("HTTP/1.1 304 Not Modified"); return true;
} if (isset($_SERVER['HTTP_IF_UNMODIFIED_SINCE']) && strtotime($_SERVER['HTTP_IF_UNMODIFIED_SINCE']) < $lastModified)
{ header("HTTP/1.1 304 Not Modified"); return true;
} if (isset($_SERVER['HTTP_IF_NONE_MATCH']) &&  $_SERVER['HTTP_IF_NONE_MATCH'] == $etag)
{ header("HTTP/1.1 304 Not Modified"); return true;
} if ($fancyName == '')
{ $fancyName = basename($fileName);
} if ($contentType == '')
{ $contentType = 'application/octet-stream';
} $fileSize = $fileStat['size']; $contentLength = $fileSize;
$isPartial = false; if (isset($_SERVER['HTTP_RANGE']))
{ if (preg_match('/^bytes=(\d*)-(\d*)$/', $_SERVER['HTTP_RANGE'], $matches)) { $startPos = $matches[1]; $endPos = $matches[2]; if ($startPos == '' && $endPos == '') { return false; } if ($startPos == '') { $startPos = $fileSize - $endPos; $endPos = $fileSize - 1; } else if ($endPos == '') { $endPos = $fileSize - 1; } $startPos = $startPos < 0 ? 0 : $startPos; $endPos = $endPos > $fileSize - 1 ? $fileSize - 1 : $endPos; $length = $endPos - $startPos + 1; if ($length < 0) { return false; } $contentLength = $length; $isPartial = true; }
} // send headers
if ($isPartial)
{ header('HTTP/1.1 206 Partial Content'); header("Content-Range: bytes $startPos-$endPos/$fileSize"); }
else
{ header("HTTP/1.1 200 OK"); $startPos = 0; $endPos = $contentLength - 1;
} header('Pragma: cache');
header('Cache-Control: public, must-revalidate, max-age=0');
header('Accept-Ranges: bytes');
header('Content-type: ' . $contentType);
header('Content-Length: ' . $contentLength); if ($forceDownload)
{ header('Content-Disposition: attachment; filename="' . rawurlencode($fancyName). '"');
} header("Content-Transfer-Encoding: binary"); $bufferSize = 2048; if ($speedLimit != 0)
{ $packetTime = floor($bufferSize * 1000000 / $speedLimit);
} $bytesSent = 0;
$fp = fopen($fileName, "rb");
fseek($fp, $startPos);
while ($bytesSent < $contentLength && !feof($fp) && connection_status() == 0 )
{ if ($speedLimit != 0) { list($usec, $sec) = explode(" ", microtime()); $outputTimeStart = ((float)$usec + (float)$sec); } $readBufferSize = $contentLength - $bytesSent < $bufferSize ? $contentLength - $bytesSent : $bufferSize; $buffer = fread($fp, $readBufferSize); echo $buffer; ob_flush(); flush(); $bytesSent += $readBufferSize; if ($speedLimit != 0) { list($usec, $sec) = explode(" ", microtime()); $outputTimeEnd = ((float)$usec + (float)$sec); $useTime = ((float) $outputTimeEnd - (float) $outputTimeStart) * 1000000; $sleepTime = round($packetTime - $useTime); if ($sleepTime > 0) { usleep($sleepTime); } }
}
return true; 

}

public function download(){

    $id = input('id');$item = Db::name('imgsubmit')->where(['id'=>$id])->find();Db::name('imgsubmit')->where(['id'=>$id])->update(['status'=>1]);$tt = ltrim($item['zip'],'uploads/');$path = config('upload_path').DS.$tt;$arr = explode('/',$path);$iname=$item['username'].'_'.$item['order_no'];///*$filename = $arr[count($arr)-1];*/$filename=$iname.'.zip';//$file  =  fopen($path, "rb");//$flag = $this->downFile($path); $flag =  $this->downloadob($path, $filename, true); // 断点续传  exit ();
}本文转自lb沫51CTO博客,原文链接:http://blog.51cto.com/13562606/2066550,如需转载请自行联系原作者

PHP 大文件下载(方式3 支持断点续传)相关推荐

  1. c#.Net MVC服务端下载文件、限制下载速度、大文件下载、对性能的影响、对大文件的支持、对断点续传和多线程下载的支持

    一.ASP.NET文件下载各种方式比较:对性能的影响.对大文件的支持.对断点续传和多线程下载的支持 asp.net里提供了多种方式,从服务器端向客户端写文件流,实现客户端下载文件.这种技术在做防下载系 ...

  2. 多宽带叠加的分布式云盘:文件秒传、断点续传、大文件下载

    多宽带叠加的分布式云盘:文件秒传.断点续传.大文件下载 1. 前言 2. 各种私有云盘对比 3.本云盘实现的功能 4. 界面 4. 安装 4.1 负载均衡服务器 4.1 储存节点 5. 代码说明 1. ...

  3. Android自带的下载功能,不需要断点续传、大文件下载、通知栏显示等窝心问题,四行代码全部搞定(经测)

    简单使用:         完成一个下载任务只需要4行代码,什么断点续传,大文件下载,通知栏进度显示-.都不需要你操心. //创建下载任务,downloadUrl就是下载链接 DownloadMana ...

  4. php 远程下载大文件,php下载远程文件(支持断点续传,支持超大文件)

    断点下载的原理:http请求头添加Range参数告诉文件服务器端需要的字节范围 例如1个文本文件的字节为1000, 第一次请求Range: bytes=0-500 第二次请求Range: bytes= ...

  5. javascript 大文件下载,分片下载,断点续传

    javascript 大文件下载,分片下载,断点续传 文章目录 javascript 大文件下载,分片下载,断点续传 1:获取文件大小: 2:切片下载 3:合并数据 4:下载到本地 5:成功 6:完整 ...

  6. SpringBoot Java实现Http方式分片下载断点续传+实现H5大视频渐进式播放

    项目Git地址:h5-video 一.功能目的 SpringBoot 实现Http分片下载断点续传,从而实现H5页面的大视频播放问题,实现渐进式播放,每次只播放需要播放的内容就可以了,不需要加载整个文 ...

  7. 使用易语言搭建WEB服务器且支持大文件下载/断点传输

    易语言搭建WEB服务器,无非就是对数据处理与协议头分析做得好即可,扩展插件也不难,只需要接入相应接口即可,那么这次也是直接使用WINDOWS API的socket套接字进行搭建的WEB服务器. 目前尚 ...

  8. php - 基于 webuploader 视频大文件分片分段上传,支持断点续传(刷新、关闭页面、重新上传、网络中断等情况)带进度条,前端后端都有示例源码详细教程

    效果图 文件上传前先检测该文件是否已上传,如果已上传提示 "文件已存在",如果未上传则直接上传. 基于 php+webuploader的大文件分片上传,带进度条,支持断点续传(刷新 ...

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

    /** php下载类,支持断点续传 * Date: 2013-06-30 * Author: fdipzone * Ver: 1.0 * edit: ww.jbxue.com * Func: * do ...

  10. Python 3.8实现支持断点续传的网络文件下载功能

    功能描述: 下载URL指定的网络文件,支持断点续传.代码支持Python 3.5/3.6/3.7/3.8以及更新的版本. 所谓断点续传,是指因为各种原因下载过程被中断之后,再次下载时会继续之前的工作, ...

最新文章

  1. shell 报错 shell-init: error retrieving current directory: getcwd: cannot access parent directories
  2. 树形动态规划 - 树中距离之和
  3. 微信小程序视频弹幕效果
  4. 横向越权访问java_基于ThinkPhp5开发横向越权逻辑漏洞安全指南
  5. 互联网运营数据分析(3): 留存分析
  6. 计算机的组成 —— 鼠标
  7. python画散点图-Python:matplotlib绘制散点图
  8. LOJ#6360. 复燃「恋之埋火」(最小圆覆盖+高斯消元)
  9. ASP.NET Core json返回忽略某些字段,实体不与数据库映射字段
  10. GitHub桌面版使用教程及中文版插件安装
  11. 方程检验格式图片_eviews的异方差检验ppt课件
  12. 华为手机长按图片无法下载
  13. 旷视科技 CVPR部分文章
  14. Activity启动过程详解(Android P)
  15. gitlab邮件发不出去解决方法
  16. 胜兵先胜而后求战,败兵先战而后求胜。
  17. 梯度下降法实现线性回归, 实例---预测波士顿房价
  18. H5互动游戏平台推荐:盘点那些超火的多人小游戏互动对战平台
  19. lower_bound()与upper_bound()
  20. 高性能云计算架构与实践8-计算节点计算服务搭建

热门文章

  1. JavaScript语言精粹(修订版)
  2. 程序员修炼道路上的“葵花宝典”——博文视点大讲堂42期快乐结束
  3. Windows操作系统的缘由
  4. 演说之禅:演说中的 1-7-7法则
  5. android picasso 圆形,Andorid开发之Picasso通过URL获取用户头像的圆形显示
  6. .vue文件怎么使用_师父给了我一个 .proto 文件,我应该怎么使用?
  7. linux mysql5.7 实例初始化_mysql 5.7多实例单配置文件安装
  8. mysql 时间戳 bigint_MySQL时间类型datetime、bigint及timestamp的查询效率
  9. 力扣-80 删除有序数组中的重复项 II
  10. Java SimpleDateFormat格式化时间不准确