基于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 09 PHP
PHP延迟静态绑定示例分享
Jun 22 PHP
php检测数组长度函数sizeof与count用法
Nov 17 PHP
PHP使用mysql_fetch_object从查询结果中获取对象集的方法
Mar 18 PHP
PHP实现图片自动清理的方法
Jul 08 PHP
PHP实现QQ快速登录的方法
Sep 28 PHP
ThinkPHP的SAE开发相关注意事项详解
Oct 09 PHP
thinkphp Apache配置重启Apache1 restart 出错解决办法
Feb 15 PHP
为何说PHP引用是个坑,要慎用
Apr 02 PHP
PHP array_reduce()函数的应用解析
Oct 28 PHP
PHP中的访问修饰符简单比较
Feb 02 PHP
php 中的信号处理操作实例详解
Mar 04 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木马攻击防御之道
2008/03/24 PHP
php版微信公众平台之微信网页登陆授权示例
2016/09/23 PHP
php基于curl主动推送最新内容给百度收录的方法
2016/10/14 PHP
PHP中echo与print区别点整理
2021/03/09 PHP
兼容Mozilla必须知道的知识。
2007/01/09 Javascript
网上抓的一个特效
2007/05/11 Javascript
js鼠标左右键 键盘值小结
2010/06/11 Javascript
Document对象内容集合(比较全)
2010/09/06 Javascript
JQuery控制Radio选中方法分析
2015/05/29 Javascript
使用jquery插件qrcode生成二维码
2015/10/22 Javascript
js中最容易被忽视的事件问题大总结
2016/05/15 Javascript
JavaScript对象封装的简单实现方法(3种方法)
2017/01/03 Javascript
Bootstrap模态窗口源码解析
2017/02/08 Javascript
JS/jquery实现一个网页内同时调用多个倒计时的方法
2017/04/27 jQuery
不得不看之JavaScript构造函数及new运算符
2017/08/21 Javascript
vuejs使用递归组件实现树形目录的方法
2017/09/30 Javascript
详解如何使用微信小程序云函数发送短信验证码
2019/03/13 Javascript
让 babel webpack vue 配置文件支持智能提示的方法
2019/06/22 Javascript
Node.JS用纯JavaScript生成图片或滑块式验证码功能
2019/09/12 Javascript
vue中组件通信详解(父子组件, 爷孙组件, 兄弟组件)
2020/07/27 Javascript
让你30分钟快速掌握vue3教程
2020/10/26 Javascript
Python的Django中django-userena组件的简单使用教程
2015/05/30 Python
python实现将英文单词表示的数字转换成阿拉伯数字的方法
2015/07/02 Python
详解Python中pandas的安装操作说明(傻瓜版)
2019/04/08 Python
python多进程并发demo实例解析
2019/12/13 Python
N:Philanthropy官网:美国洛杉矶基础款服装
2020/06/09 全球购物
C++面试题:关于链表和指针
2013/06/05 面试题
技术总监的工作职责
2013/11/13 职场文书
出国留学经济担保书
2014/04/01 职场文书
股指期货心得体会
2014/09/13 职场文书
毕业设计答辩开场白
2015/05/29 职场文书
恰同学少年观后感
2015/06/08 职场文书
工伤事故赔偿协议书
2015/08/06 职场文书
车位出租协议书范本
2016/03/19 职场文书
防止web项目中的SQL注入
2021/12/06 MySQL
Python可变与不可变数据和深拷贝与浅拷贝
2022/04/06 Python