基于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信息的类
Jan 02 PHP
mysql 字段类型说明
Apr 27 PHP
php快递单号查询接口使用示例
May 05 PHP
php禁止直接从浏览器输入地址访问.php文件的方法
Nov 04 PHP
PHP学习笔记(三):数据类型转换与常量介绍
Apr 17 PHP
php文件上传的两种实现方法
Apr 04 PHP
thinkPHP模板算术运算相关函数用法分析
Jul 12 PHP
探究Laravel使用env函数读取环境变量为null的问题
Dec 06 PHP
PHP下载远程图片的几种方法总结
Apr 07 PHP
PHP get_html_translation_table()函数用法讲解
Feb 16 PHP
laravel 使用auth编写登录的方法
Sep 30 PHP
php 输出缓冲 Output Control用法实例详解
Mar 03 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/10/09 PHP
php IP转换整形(ip2long)的详解
2013/06/06 PHP
YII模块实现绑定二级域名的方法
2014/07/09 PHP
PHP实现根据设备类型自动跳转相应页面的方法
2014/07/24 PHP
php上传图片客户端和服务器端实现方法
2015/03/30 PHP
WordPress中注册菜单与调用菜单的方法详解
2015/12/18 PHP
PHP类与对象后期静态绑定操作实例详解
2018/12/20 PHP
利用Dojo和JSON建立无限级AJAX动态加载的功能模块树
2007/03/24 Javascript
基于jquery的回到页面顶部按钮
2011/06/27 Javascript
自定义的一个简单时尚js下拉选择框
2013/11/20 Javascript
jquery新的绑定事件机制on方法的使用方法
2014/04/15 Javascript
javascript实现左右控制无缝滚动
2014/12/31 Javascript
jQuery使用$.get()方法从服务器文件载入数据实例
2015/03/25 Javascript
基于JavaScript实现快速转换文本语言(繁体中文和简体中文)
2016/03/07 Javascript
js获取浏览器和屏幕的各种宽度高度
2017/02/22 Javascript
jQuery模拟爆炸倒计时功能实例代码
2017/08/21 jQuery
Vue入门之数据绑定(小结)
2018/01/08 Javascript
Node.js Stream ondata触发时机与顺序的探索
2019/03/08 Javascript
详解如何更好的使用module vuex
2019/03/27 Javascript
JQuery使用属性addClass、removeClass和toggleClass实现增加和删除类操作示例
2019/11/18 jQuery
使用Python实现一个简单的项目监控
2015/03/31 Python
Python基础之函数的定义与使用示例
2019/03/23 Python
Python 使用PyQt5 完成选择文件或目录的对话框方法
2019/06/27 Python
基于Python实现下载网易音乐代码实例
2020/08/10 Python
台湾网友喜爱的综合型网路购物商城:Yahoo! 奇摩购物中心
2018/03/10 全球购物
宠物店的创业计划书范文
2014/01/11 职场文书
大学生毕业自我鉴定范文
2014/02/03 职场文书
总经理的岗位职责
2014/02/23 职场文书
网页美工求职信范文
2014/04/17 职场文书
先进个人事迹材料
2014/12/29 职场文书
社区元宵节活动总结
2015/02/06 职场文书
英语导游词
2015/02/13 职场文书
刑事起诉书范文
2015/05/19 职场文书
消防演习感想
2015/08/10 职场文书
财产分割协议书
2016/03/22 职场文书
80行代码写一个Webpack插件并发布到npm
2021/05/24 Javascript