基于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 相关文章推荐
php中看实例学正则表达式
Dec 25 PHP
探讨fckeditor在Php中的配置详解
Jun 08 PHP
PHP小教程之实现链表
Jun 09 PHP
php读取目录及子目录下所有文件名的方法
Oct 20 PHP
php获取用户浏览器版本的方法
Jan 03 PHP
WordPress中用于获取文章作者与分类信息的方法整理
Dec 17 PHP
微信支付开发告警通知实例
Jul 12 PHP
PHP删除数组中指定下标的元素方法
Feb 03 PHP
thinkPHP5.0框架事务处理操作简单示例
Sep 07 PHP
laravel返回统一格式错误码问题
Nov 04 PHP
PHP连接MySQL数据库操作代码实例解析
Jul 11 PHP
PHP内存溢出优化代码详解
Feb 26 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 调试环境(IIS+PHP+MYSQL)
2007/01/10 PHP
php+ajax无刷新上传图片实例代码
2015/11/17 PHP
php fread函数使用方法总结
2019/05/28 PHP
在TP5数据库中四个字段实现无限分类的示例
2019/10/18 PHP
JavaScript CSS 修改学习第四章 透明度设置
2010/02/19 Javascript
基于jQuery的弹出警告对话框美化插件(警告,确认和提示)
2010/06/10 Javascript
SlideView 图片滑动(扩展/收缩)展示效果
2010/08/01 Javascript
JavaScript作用域链使用介绍
2013/08/29 Javascript
jquery使用animate方法实现控制元素移动
2015/03/27 Javascript
JavaScript中使用Math.PI圆周率属性的方法
2015/06/14 Javascript
javascript如何实现暂停功能
2015/11/06 Javascript
轻松理解JavaScript之AJAX
2017/03/15 Javascript
vue-router 权限控制的示例代码
2017/09/21 Javascript
Javascript 类型转换、封闭函数及常见内置对象操作示例
2019/11/15 Javascript
[01:37]TI4西雅图DOTA2前线报道 VG拿下首胜教练357给出获胜秘诀
2014/07/10 DOTA
python实现登陆知乎获得个人收藏并保存为word文件
2015/03/16 Python
python MySQLdb Windows下安装教程及问题解决方法
2015/05/09 Python
浅谈插入排序算法在Python程序中的实现及简单改进
2016/05/04 Python
Python 字典与字符串的互转实例
2017/01/13 Python
Python结巴中文分词工具使用过程中遇到的问题及解决方法
2017/04/15 Python
python3中类的继承以及self和super的区别详解
2019/06/26 Python
用Python开发app后端有优势吗
2020/06/29 Python
Python中的特殊方法以及应用详解
2020/09/20 Python
HTML5拖拽文件到浏览器并实现文件上传下载功能代码
2013/06/06 HTML / CSS
StubHub墨西哥:购买和出售您的门票
2016/09/17 全球购物
经济实惠的名牌太阳镜和眼镜:Privé Revaux
2021/02/07 全球购物
大学生创业计划书的格式要求
2013/12/29 职场文书
学习党的群众路线教育实践活动心得体会
2014/03/01 职场文书
学校宣传标语
2014/06/18 职场文书
医德考评自我评价
2014/09/14 职场文书
省委召开党的群众路线教育实践活动总结大会报告
2014/10/21 职场文书
2014年教学管理工作总结
2014/12/02 职场文书
停电调休通知
2015/04/16 职场文书
风之谷观后感
2015/06/11 职场文书
2019广播稿怎么写
2019/04/17 职场文书
什么是求职信?求职信应包含哪些内容?
2019/08/14 职场文书