基于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 调用远程url的六种方法小结
Nov 02 PHP
解析php mysql 事务处理回滚操作(附实例)
Aug 05 PHP
codeigniter教程之多文件上传使用示例
Feb 11 PHP
php实现根据IP地址获取其所在省市的方法
Apr 30 PHP
linux下php上传文件注意事项
Jun 11 PHP
PHP实现图片批量打包下载功能
Mar 01 PHP
PHP 实现字符串翻转(包含中文汉字)的实现代码
Apr 01 PHP
[企业公众号]升级到[企业微信]之后发送消息失败的解决方法
Jun 30 PHP
PHP简单实现欧拉函数Euler功能示例
Nov 06 PHP
PHP-FPM和Nginx的通信机制详解
Feb 01 PHP
如何解决PHP获取不到SESSION信息之一般情况
Oct 10 PHP
laravel框架邮箱认证实现方法详解
Nov 22 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安全之直接用$获取值而不$_GET 字符转义
2012/06/03 PHP
PHP实现小偷程序实例
2016/10/31 PHP
php+redis消息队列实现抢购功能
2018/02/08 PHP
使用jQuery简化Ajax开发 Ajax开发入门
2009/10/14 Javascript
javascript css styleFloat和cssFloat
2010/03/15 Javascript
jQuery 自定义函数写法分享
2012/03/30 Javascript
JavaScript获取表单enctype属性的方法
2015/04/02 Javascript
AngularJS中监视Scope变量以及外部调用Scope方法
2016/01/23 Javascript
jQuery validate+artdialog+jquery form实现弹出表单思路详解
2016/04/18 Javascript
jQuery添加和删除输入文本框标签代码
2016/05/20 Javascript
jQuery继承extend用法详解
2016/10/10 Javascript
详解基于vue-cli优化的webpack配置
2017/11/06 Javascript
vue v-model实现自定义样式多选与单选功能
2018/07/05 Javascript
详解如何使用webpack打包多页jquery项目
2019/02/01 jQuery
解决vue使用vant轮播组件swipe + flex时文字抖动问题
2021/01/07 Vue.js
js实现鼠标切换图片(无定时器)
2021/01/27 Javascript
[30:37]【全国守擂赛】第三周擂主赛 Dark Knight vs. Leopard Gaming
2020/05/04 DOTA
[51:20]完美世界DOTA2联赛PWL S2 Magma vs PXG 第一场 11.28
2020/12/01 DOTA
Python设计模式编程中Adapter适配器模式的使用实例
2016/03/02 Python
Python之日期与时间处理模块(date和datetime)
2017/02/16 Python
python获取网页中所有图片并筛选指定分辨率的方法
2018/03/31 Python
Python OpenCV处理图像之图像直方图和反向投影
2018/07/10 Python
使用Python画出小人发射爱心的代码
2019/11/23 Python
如何用 Python 处理不平衡数据集
2021/01/04 Python
纯CSS和jQuery实现的在页面顶部显示的进度条效果2例(仿手机浏览器进度条效果)
2014/04/16 HTML / CSS
SK-II神仙水美国官网:SK-II美国
2020/02/25 全球购物
艺术专业大学生自我评价
2013/09/22 职场文书
股东协议书范本
2014/04/14 职场文书
学校标语大全
2014/06/19 职场文书
2014年平安建设工作总结
2014/11/19 职场文书
2014工程部年度工作总结
2014/12/17 职场文书
档案接收函格式
2015/01/30 职场文书
公务员年度考核登记表个人总结
2015/02/12 职场文书
农业项目合作意向书
2015/05/08 职场文书
用javascript制作qq注册动态页面
2021/04/14 Javascript
python游戏开发Pygame框架
2022/04/22 Python