基于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 相关文章推荐
自己动手做一个SQL解释器
Oct 09 PHP
如何分别全角和半角以避免乱码
Oct 09 PHP
php chr() ord()中文截取乱码问题解决方法
Sep 08 PHP
一个简单php扩展介绍与开发教程
Aug 19 PHP
zf框架的数据库追踪器使用示例
Mar 13 PHP
php实现的太平洋时间和北京时间互转的自定义函数分享
Aug 19 PHP
thinkPHP+PHPExcel实现读取文件日期的方法(含时分秒)
Jul 07 PHP
[原创]php简单隔行变色功能实现代码
Jul 09 PHP
php调用云片网接口发送短信的实现方法
Oct 25 PHP
PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析
Apr 20 PHP
PHP获取星期几的常用方法小结
Dec 18 PHP
PHP的mysqli_select_db()函数讲解
Jan 23 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中,文件上传
2006/12/06 PHP
深入理解require与require_once与include以及include_once的区别
2013/06/05 PHP
ioncube_loader_win_5.2.dll的错误解决方法
2015/01/04 PHP
详解php语言最牛掰的Laravel框架
2017/11/20 PHP
javascript setTimeout和setInterval 的区别
2009/12/08 Javascript
js字母大小写转换实现方法总结
2013/11/13 Javascript
javascript中文本框中输入法切换的问题
2013/12/10 Javascript
值得学习的bootstrap fileinput文件上传工具
2016/11/08 Javascript
javascript数组去重方法分析
2016/12/15 Javascript
ionic开发中点击input时键盘自动弹出
2016/12/23 Javascript
Vue中使用vux的配置详解
2017/05/05 Javascript
JavaScript中BOM对象原理与用法分析
2019/07/09 Javascript
Python中optparse模块使用浅析
2015/01/01 Python
用实例详解Python中的Django框架中prefetch_related()函数对数据库查询的优化
2015/04/01 Python
解读Python中degrees()方法的使用
2015/05/18 Python
使用 Python 实现微信公众号粉丝迁移流程
2018/01/03 Python
简单了解python模块概念
2018/01/11 Python
python如何定义带参数的装饰器
2018/03/20 Python
Python脚本按照当前日期创建多级目录
2019/03/01 Python
Python学习笔记之函数的定义和作用域实例详解
2019/08/13 Python
Python 函数list&read&seek详解
2019/08/28 Python
Python3 操作 MySQL 插入一条数据并返回主键 id的实例
2020/03/02 Python
Python实现对adb命令封装
2020/03/06 Python
python GUI框架pyqt5 对图片进行流式布局的方法(瀑布流flowlayout)
2020/03/12 Python
python:删除离群值操作(每一行为一类数据)
2020/06/08 Python
Python将字典转换为XML的方法
2020/08/01 Python
CSS3实现复选框动画特效示例代码
2016/09/27 HTML / CSS
Sunglass Hut巴西网上商店:男女太阳镜
2020/10/04 全球购物
剪枝的学问教学反思
2014/02/07 职场文书
考试作弊检讨书大全
2014/02/18 职场文书
锅炉工岗位职责
2015/02/13 职场文书
公司仓库管理制度
2015/08/04 职场文书
大学军训通讯稿(2016最新版)
2015/12/21 职场文书
《观察物体》教学反思
2016/02/17 职场文书
新手入门Mysql--sql执行过程
2021/06/20 MySQL
浅谈spring boot使用thymeleaf版本的问题
2021/08/04 Java/Android