基于php下载文件的详解


Posted in PHP onJune 02, 2013

php下载文件,比如txt文件。
出现的效果就是,弹出浏览器自带的下载框,出现另存为操作。有时候会出现内存溢出和超时的现象。
超时的话,设置set_time_limit(0);
出现内存溢出的话,有可能是因为从数据库中取出的数据量太大导致的。
如果是从文件中读取的话,出现内存溢出的话,就是代码读取方式不正确,调用files或者filegetcontens才会
如果是fopen的话,就给一个缓冲区,固定大小,读入然后写入,不会出现内存溢出的情况。
如代码:

if (file_exists($file_path)) { //如果文件存在
$handle = fopen($file_path, "r");
while (!feof($handle)) {
$content = fgets($handle, 4096); //读取一行
echo $content; //输出到缓冲区,即php://stdout。达到缓冲区设置值后由tcp传给浏览器进行输出  一般到512字节就会通过网络输出给浏览器
}
fclose($handle);
}

但是在输出之前,要调用一次,@ob_end_flush();不能循环调用,只调用一次就好。
@ob_end_flush();//冲刷出(送出)输出缓冲区内容并关闭缓冲
文件下载:
content-type://下载的格式,浏览器不能解析的格式就会弹出下载框
header("Content-Type: application/force-download");
header("Content-Type: application/download");
header("Content-Transfer-Encoding: binary");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Pragma: no-cache");
Header("Content-type: application/octet-stream");//响应内容类型

Header("Accept-Ranges: bytes");
Header("Accept-Length: ".filesize($filename). ' bytes');
Header('Content-Disposition: attachment; filename='.$filename);
//HTTP响应头

PHP 相关文章推荐
Apache, PHP在Windows 9x/NT下的安装与配置 (二)
Oct 09 PHP
Ping服务的php实现方法,让网站快速被收录
Feb 04 PHP
php+xml实现在线英文词典之添加词条的方法
Jan 23 PHP
PHP 正则表达式小结
Feb 12 PHP
php中smarty实现多模版网站的方法
Jun 11 PHP
PHP中include/require/include_once/require_once使用心得
Aug 28 PHP
Yii2框架数据库简单的增删改查语法小结
Aug 31 PHP
php简单实现多维数组排序的方法
Sep 30 PHP
php页面跳转session cookie丢失导致不能登录等问题的解决方法
Dec 12 PHP
PHP微信企业号开发之回调模式开启与用法示例
Nov 25 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
Dec 20 PHP
PHP设计模式之命令模式示例详解
Dec 20 PHP
用PHP实现浏览器点击下载TXT文档的方法详解
Jun 02 #PHP
优化PHP代码技巧的小结
Jun 02 #PHP
PHP无限分类(树形类)的深入分析
Jun 02 #PHP
基于php无限分类的深入理解
Jun 02 #PHP
php curl的深入解析
Jun 02 #PHP
Window 7/XP 安装Apache 2.4与PHP 5.4 的过程详解
Jun 02 #PHP
web站点获取用户IP的安全方法 HTTP_X_FORWARDED_FOR检验
Jun 01 #PHP
You might like
php 获取可变函数参数的函数
2009/08/26 PHP
PHP下对数组进行排序的函数
2010/08/08 PHP
win7+apache+php+mysql环境配置操作详解
2013/06/10 PHP
PHP之图片上传类实例代码(加了缩略图)
2016/06/30 PHP
php获取字符串前几位的实例(substr返回字符串的子串用法)
2017/03/08 PHP
PHP7下协程的实现方法详解
2017/12/17 PHP
PHP迭代器和生成器用法实例分析
2019/09/28 PHP
javascript的onchange事件与jQuery的change()方法比较
2009/09/28 Javascript
怎样在JavaScript里写一个swing把数据插入数据库
2012/12/10 Javascript
直接拿来用的15个jQuery代码片段
2015/09/23 Javascript
node.js实现的装饰者模式示例
2017/09/06 Javascript
vue-cli+webpack项目 修改项目名称的方法
2018/02/28 Javascript
JS/HTML5游戏常用算法之路径搜索算法 随机迷宫算法详解【普里姆算法】
2018/12/13 Javascript
解决layui的radio属性或别的属性没显示出来的问题
2019/09/26 Javascript
小程序自动化测试的示例代码
2020/08/11 Javascript
javascript实现电商放大镜效果
2020/11/23 Javascript
[03:58]2014DOTA2国际邀请赛 龙宝赛后解密DK获胜之道
2014/07/14 DOTA
[01:13:08]2018DOTA2亚洲邀请赛4.6 淘汰赛 mineski vs LGD 第二场
2018/04/10 DOTA
Python中的引用和拷贝浅析
2014/11/22 Python
python使用urllib2提交http post请求的方法
2015/05/26 Python
Python一行代码实现快速排序的方法
2019/04/30 Python
在win10和linux上分别安装Python虚拟环境的方法步骤
2019/05/09 Python
opencv-python 读取图像并转换颜色空间实例
2019/12/09 Python
基于python3.7利用Motor来异步读写Mongodb提高效率(推荐)
2020/04/29 Python
如何利用Python写个坦克大战
2020/11/18 Python
加拿大的标志性百货公司:Hudson’s Bay(哈得逊湾)
2019/09/03 全球购物
路德维希•贝克(LUDWIG BECK)中文官网:德国大型美妆百货
2020/09/19 全球购物
Java面试题及答案
2012/09/08 面试题
What's the difference between Debug and Trace class? (Debug类与Trace类有什么区别)
2013/09/10 面试题
中专生职业生涯规划书范文
2014/01/10 职场文书
专业求职信撰写要诀
2014/02/18 职场文书
幼儿园新年寄语
2014/04/03 职场文书
孝敬父母的活动方案
2014/08/28 职场文书
迁户口计划生育证明
2014/10/19 职场文书
SpringCloud Alibaba项目实战之nacos-server服务搭建过程
2021/06/21 Java/Android
FP-growth算法发现频繁项集——发现频繁项集
2021/06/24 Python