下载电影下了一个php格式的,PHP实现文件下载断点续传
/*
* PHP下载断点续传
* from:php100
*/
function dl_file_resume($file){
//检测文件是否存在
if (!is_file($file)) { die("404 File not found!"); }
$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("文件不存在!");
}
}
?>
//该片段来自于http://www.codesnippet.cn/detail/24112012641.html
下载电影下了一个php格式的,PHP实现文件下载断点续传相关推荐
- java中如何把时间封装成类,java-如何在不使用任何不推荐使用的类的情况下将日期从一种格式转换为另一种格式的日期对象?...
java-如何在不使用任何不推荐使用的类的情况下将日期从一种格式转换为另一种格式的日期对象? 我想将date1格式的日期转换为date2格式的日期对象. SimpleDateFormat simple ...
- 初次转化max模型为3D Tiles失败、cesium加载一个obj格式的3D 机房模型
先下一个3D max模型,后缀为.max:用3D max打开:网上下的其他模型查看器不能打开: 打开时会出错误提示:对max模型文件和3d max还不了解: 打开后如下:是一个机房的3D模型: 下载一 ...
- 关于springmvc下服务器文件打包成zip格式下载功能
关于springmvc下服务器文件打包成zip格式下载功能 2016年09月21日 11:22:14 toxic_guantou 阅读数:5731更多 个人分类: 技术点存储 版权声明:本文为博主原创 ...
- Linux下分区格式ext3,Windows下读取Linux的ext3/ext4格式分区
ext3/ext4等日志型文件系统是Linux中被广泛应用的,通常是许多流行Linux发行版默认的文件系统.下面将介绍2款可以在 Windows 系统下读取 Linux 的 ext3/ext4 格式分 ...
- 关于Windows下记事本中保存编码的格式问题
关于Windows下记事本中保存编码的格式问题 Windows下记事本保存文本文件的时候,可以选择不同的编码格式来保存文件,各种编码保存的文件的二进制是不同的,举例说明: 我们在记事本中输入123,选 ...
- linux分区文件ext4和ext3,Windows下读取Linux的ext3/ext4格式分区
ext3/ext4等日志型文件系统是Linux中被广泛应用的,通常是许多流行Linux发行版默认的文件系统.下面将介绍2款可以在 Windows 系统下读取 Linux 的 ext3/ext4 格式分 ...
- 分享下自己写的一个微信小程序请求远程数据加载到页面的代码
分享下自己写的一个微信小程序请求远程数据加载到页面的代码 1 思路整理 就是页面加载完毕的时候 请求远程接口,然后把数据赋值给页面的变量 ,然后列表循环 2 js相关代码 我是改的 onload ...
- Linux下静态编译的一个TIP
Linux下静态编译的一个TIP | 素包子 Linux下静态编译的一个TIP 2010年3月28日 baoz 阅读评论 linux下静态编译好处很多,一来是可以跨发行版(debian redhat ...
- 商品类型的下拉框绑定一个事件,通过ajax获取属性
html代码这么写 <!-- 商品属性 --> <table cellspacing="1" cellpadding="3" width=&q ...
最新文章
- 数据交互极速体验-KETTLE的上手指南
- 微信小程序 引用 map 地图,显示当前位置
- hashmap为什么线程不安全_什么时候线程不安全?怎样做到线程安全?怎么扩展线程安全的类?...
- 项目管理过程组和知识领域
- 大地最新win11 32位专业版镜像v2021.07
- python开发之路---第二章之--函数之匿名函数
- requests模块报错:Use body.encode('utf-8') if you want to send it encoded in UTF-8.
- 万能五笔输入法弹窗_万能五笔输入法广告屏蔽的方法
- 【Typecho插件】SakuraLoad
- mp3转换html5,五个免费在线mp3音频音乐编辑转换网站,实用的音频编辑软件
- Create.js实战-MovieClip操作
- 嘉应学院计算机专业毕业好找工作吗,嘉应学院毕业证两字之差致学生求职碰壁...
- 孤独是人成熟的必经之路
- Python深度学习-第一章、什么是深度学习
- 仿新浪微博的插入#话题#
- 微软8月底推出网络音乐商店 全面挑战苹果
- 一篇文章入门Mysql
- 在视频中选定/截取部分区域画面,然后将左上角坐标百分比和选定区域宽高所占百分比传给后端
- Vue的基本知识——wsdchong
- 三国杀充值登陆服务器响应超时,三国杀登录超时怎么办?登陆失败解决方法[多图]...
热门文章
- 通过网站漏洞扫描 找出网站被黑的原因
- 弘辽科技:淘宝直通车怎么优化能开出高转化率
- 单片机c语言编程 时钟加日历转换,基于52单片机电子时钟日历系统的设计
- 【观察】浪潮信息龙蜥联合实验室:打造下一代操作系统,筑牢基础软件创新根基...
- C#,人工智能,机器学习,聚类算法,训练数据集生成算法、软件与源代码
- 当“加班”成为一种文化
- BNT工具箱在Matlab中如何简易添加
- 小米也要造车了?为何手机厂商也爱造车?
- python脚本-caeser凯撒密码-rot13
- Spring boot整合Redis实现发布订阅(超详细)