基于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 文件上传功能实现代码
Jun 24 PHP
php empty函数判断mysql表单是否为空
Apr 12 PHP
php学习笔记之面向对象编程
Dec 29 PHP
深入分析使用mysql_fetch_object()以对象的形式返回查询结果
Jun 05 PHP
基于PHP读取csv文件内容的详解
Jun 18 PHP
ThinkPHP表单自动提交验证实例教程
Jul 18 PHP
PHP+iFrame实现页面无需刷新的异步文件上传
Sep 16 PHP
thinkphp项目部署到Linux服务器上报错“模板不存在”如何解决
Apr 27 PHP
Yii2针对游客、用户防范规则和限制的解决方法分析
Oct 08 PHP
PHP基于curl实现模拟微信浏览器打开微信链接的方法示例
Feb 15 PHP
解决tp5在nginx下修改配置访问的问题
Oct 16 PHP
laravel利用中间件做防非法登录和权限控制示例
Oct 21 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 array_multisort() 函数的深入解析
2013/06/20 PHP
mysql desc(DESCRIBE)命令实例讲解
2016/09/24 PHP
JS input 数字验证代码
2009/07/30 Javascript
基于jQuery的的一个隔行变色,鼠标移动变色的小插件
2010/07/06 Javascript
Script的加载方法小结
2011/01/12 Javascript
javascript:history.go()和History.back()的区别及应用
2012/11/25 Javascript
js如何改变文章的字体大小
2016/01/08 Javascript
jQuery插件formValidator实现表单验证
2016/05/23 Javascript
JS实现鼠标框选效果完整实例
2016/06/20 Javascript
jQuery多文件异步上传带进度条实例代码
2016/08/16 Javascript
Jquery组件easyUi实现表单验证示例
2016/08/23 Javascript
js倒计时显示实例
2016/12/11 Javascript
利用node.js如何创建子进程详解
2017/12/09 Javascript
JavaScript实现新年倒计时效果
2018/11/17 Javascript
JS实现audio音频剪裁剪切复制播放与上传(步骤详解)
2020/07/28 Javascript
Python序列操作之进阶篇
2016/12/08 Python
用Python写脚本,实现完全备份和增量备份的示例
2018/04/29 Python
将Dataframe数据转化为ndarry数据的方法
2018/06/28 Python
Ubuntu中配置TensorFlow使用环境的方法
2020/04/21 Python
Python pip install之SSL异常处理操作
2020/09/03 Python
使用CSS3来绘制一个月食图案
2015/07/18 HTML / CSS
即时搜索数百万张门票:SeatsForEveryone.com
2018/08/26 全球购物
伦敦新晋轻奢耳饰潮牌:Tada & Toy
2020/05/25 全球购物
生产部经理岗位职责
2013/12/16 职场文书
暑期社会实践学生的自我评价
2014/01/09 职场文书
小学语文教学反思
2014/02/10 职场文书
大专学生求职自荐信
2014/07/06 职场文书
节能环保演讲稿
2014/08/28 职场文书
纪律教育学习心得体会
2014/09/02 职场文书
党代会心得体会
2014/09/04 职场文书
党的群众路线教育实践活动个人对照检查材料(医生)
2014/11/05 职场文书
国家助学金感谢信
2015/01/21 职场文书
十七岁的单车观后感
2015/06/12 职场文书
2015年初中教师个人工作总结
2015/07/21 职场文书
JavaWeb Servlet实现网页登录功能
2021/07/04 Java/Android
Python Django获取URL中的数据详解
2021/11/01 Python