PHP实现大文件下载
实现大文件下载的关键在于循环读取字节流
function downloadFile($filename) {
//获取文件的扩展名
$allowDownExt = array ( 'rar', 'zip', 'png', 'txt', 'mp4', 'html');
//获取文件信息
$fileExt = pathinfo($filename);
//检测文件类型是否允许下载
if(!in_array($fileExt['extension'], $allowDownExt)) {
return false;
}
//设置脚本的最大执行时间,设置为0则无时间限制
set_time_limit(0);
ini_set('max_execution_time', '0');
//通过header()发送头信息
//因为不知道文件是什么类型的,告诉浏览器输出的是字节流
header('content-type:application/octet-stream');
//告诉浏览器返回的文件大小类型是字节
header('Accept-Ranges:bytes');
//获得文件大小
//$filesize = filesize($filename);//(此方法无法获取到远程文件大小)
$header_array = get_headers($filename, true);
$filesize = $header_array['Content-Length'];
//告诉浏览器返回的文件大小
header('Accept-Length:'.$filesize);
//告诉浏览器文件作为附件处理并且设定最终下载完成的文件名称
header('content-disposition:attachment;filename='.basename($filename));
//针对大文件,规定每次读取文件的字节数为4096字节,直接输出数据
$read_buffer = 4096;
$handle = fopen($filename, 'rb');
//总的缓冲的字节数
$sum_buffer = 0;
//只要没到文件尾,就一直读取
while(!feof($handle) && $sum_buffer<$filesize) {
echo fread($handle,$read_buffer);
$sum_buffer += $read_buffer;
}
//关闭句柄
fclose($handle);
exit;
}
PHP实现大文件下载的更多相关文章
- ASP.NET 大文件下载的实现思路及代码
文件下载是一个网站最基本的功能,ASP.NET网站的文件下载功能实现也很简单,但是如果遇到大文件的下载而不做特殊处理的话,那将会出现不可预料的后果.本文就基于ASP.NET提供大文件下载的实现思路及代 ...
- 2016 - 1- 24 大文件下载 关于NSOutStream 的使用补充
// // ViewController.m // 大文件下载 // // Created by Mac on 16/1/24. // Copyright © 2016年 Mac. All right ...
- Django 大文件下载
django提供文件下载时,若果文件较小,解决办法是先将要传送的内容全生成在内存中,然后再一次性传入Response对象中: def simple_file_download(request): # ...
- 网络编程---(数据请求+slider)将网络上的大文件下载到本地,并打印其进度
网络编程---将网络上的大文件下载到本地,并打印其进度. 点击"開始传输"button.将网络上的大文件先下载下来,下载完毕后,保存到本地. UI效果图例如以下: watermar ...
- OC - 16.大文件下载
大文件下载注意事项 若不对下载的文件进行转存,会造成内存消耗急剧升高,甚至耗尽内存资源,造成程序终止. 在文件下载过程中通常会出现中途停止的状况,若不做处理,就要重新开始下载,浪费流量. 大文件下载的 ...
- .net Mvc文件下载的功能,大文件下载完成之后修改数据库功能
原文:.net Mvc文件下载的功能,大文件下载完成之后修改数据库功能 我服务器上文件只能下载一次,下载了之后就不能下载了,大文件或网速不好时,可能服务端文件流发送完了,客户端还没下载完,导致下载失败 ...
- iOS开发-大文件下载与断点下载思路
大文件下载方案一:利用NSURLConnection和它的代理方法,及NSFileHandle(iOS9后不建议使用)相关变量: @property (nonatomic,strong) NSFile ...
- python 全栈开发,Day36(作业讲解(大文件下载以及进度条展示),socket的更多方法介绍,验证客户端链接的合法性hmac,socketserver)
先来回顾一下昨天的内容 黏包现象粘包现象的成因 : tcp协议的特点 面向流的 为了保证可靠传输 所以有很多优化的机制 无边界 所有在连接建立的基础上传递的数据之间没有界限 收发消息很有可能不完全相 ...
- java web 大文件下载
泽优大文件下载产品测试 泽优大文件下载控件down2,基于php开发环境测试. 开发环境:HBuilder 服务器:wamp64 数据库:mysql 可视化数据库编辑工具:Navicat Premiu ...
随机推荐
- 关于键盘事件对象code值
e.keyCode || e.which || e.charCode; //IE只有keyCode属性,FireFox中有which和charCode属性,Opera中有keyCode和which属性 ...
- day04-Servlet介绍(1)
1.servlet的概述 a.什么是servlet --servlet是javaWeb的三大组件(Listener,Filter)之一,他属于动态资源 --servlet的作用是(10086): 服务 ...
- day 1:计算机发展史和组成部分
本节内容: 1,计算机的发展史 2,计算机的组成 1,计算机的发展史 1946年2月14日,由美国军方定制的世界上第一台电子计算机“电子数字积分计算机”(ENIAC Electronic Numeri ...
- idea出现找不到实体类
今天经理遇到一个很奇怪的问题: 在使用idea时,就是包真实存在,但是包中的实体类却无法智能提示,也无法导入成功: 我推荐的解决办法是重新导入,但是没有用,经理在网上找了很多解决方式,依然无效: 最后 ...
- SpringCloud(一)Eureka注册中心
Eureka简介 Eureka作为注册中心,管理各种服务功能包括服务的注册.发现.熔断.负载.降级等 Eureka注册中心实例 Eureka Server 1.pom文件配置SpringBoot.Sp ...
- SRILM的使用及平滑方法说明
1.简介 SRILM是通过统计方法构建语言模型,主要应用于语音识别,文本标注和切分,以及机器翻译等. SRILM支持语言模型的训练和评测,通过训练数据得到语言模型,其中包括最大似然估计及相应的平滑算法 ...
- easyui combobox 不能选中值的问题
easyui comboxbox 下拉框加载到数据,但是不能选中.一般情况是重复渲染,页面有同名元素,valueField重复. 这次遇到的具体问题是,第一次刷新页面,可以选中,第二次不能选中.考虑到 ...
- linux上安装mysql5.7
1.下载tar包,这里使用wget从官网下载 wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.22-linux-glibc2. ...
- angular点击查看更多(简单demo)
今天来跟大家分享一个小的demo,一般网页浏览到底部的时候会有一个点击加载更多的按钮,之前一直纠结怎么写这个,今天学习angular时发现可以用组件来实现这么一个小的效果,大家有兴趣的话可以看一下. ...
- 重写toFixed()方法
1.直接在原型上修改,仍然使用元调用方式 Number.prototype.toFixed = function (exponent) { return parseInt(this * Math.po ...