基于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来检测proxy
Oct 09 PHP
php 无法加载mysql的module的时候的配置的解决方案引发的思考
Jan 27 PHP
php文件上传的简单实例
Oct 19 PHP
ajax返回值中有回车换行、空格的解决方法分享
Oct 24 PHP
php使用smtp发送支持附件的邮件示例
Apr 13 PHP
php单态设计模式(单例模式)实例
Nov 18 PHP
smarty内置函数section的用法
Jan 22 PHP
php实现XSS安全过滤的方法
Jul 29 PHP
100多行PHP代码实现socks5代理服务器[2]
May 05 PHP
PHP自定义图片缩放函数实现等比例不失真缩放的方法
Aug 19 PHP
php中static和const关键字用法分析
Dec 07 PHP
thinkPHP引入类的方法详解
Dec 08 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设置图片文件上传大小的具体实现方法
2013/10/11 PHP
PHP页面实现定时跳转的方法
2014/10/31 PHP
Aliyun Linux 编译安装 php7.3 tengine2.3.2 mysql8.0 redis5的过程详解
2020/10/20 PHP
javascript实现的使用方向键控制光标在table单元格中切换
2010/11/17 Javascript
使用JavaScript实现Java的List功能(实例讲解)
2013/11/07 Javascript
用JS将搜索的关键字高亮显示实现代码
2013/11/08 Javascript
react-native 完整实现登录功能的示例代码
2017/09/11 Javascript
vue-cli+webpack项目 修改项目名称的方法
2018/02/28 Javascript
Vue点击切换颜色的方法
2018/09/13 Javascript
浅谈angular2子组件的事件传递(任意组件事件传递)
2018/09/30 Javascript
Vue项目history模式下微信分享爬坑总结
2019/03/29 Javascript
Vue v-text指令简单使用方法示例
2019/09/19 Javascript
vue项目使用高德地图的定位及关键字搜索功能的实例代码(踩坑经验)
2020/03/07 Javascript
js如何验证密码强度
2020/03/18 Javascript
Python实现根据指定端口探测服务器/模块部署的方法
2014/08/25 Python
深入理解python多进程编程
2016/06/12 Python
qpython3 读取安卓lastpass Cookies
2016/06/19 Python
python中使用psutil查看内存占用的情况
2018/06/11 Python
python networkx 包绘制复杂网络关系图的实现
2019/07/10 Python
tensorflow查看ckpt各节点名称实例
2020/01/21 Python
解决python运行效率不高的问题
2020/07/20 Python
Python Pandas list列表数据列拆分成多行的方法实现
2020/12/14 Python
html如何对span设置宽度
2019/10/30 HTML / CSS
美国知名户外用品畅销中心:Sierra Trading Post
2016/07/19 全球购物
美国著名的户外用品品牌:L.L.Bean
2018/01/05 全球购物
应届生.NET方向面试题
2015/05/23 面试题
EntityManager都有哪些方法
2013/11/01 面试题
写给老师的表扬信
2014/01/21 职场文书
“四风”问题自我剖析材料思想汇报
2014/09/23 职场文书
考试没考好检讨书(精选篇)
2014/11/16 职场文书
2014年设备管理工作总结
2014/11/26 职场文书
老龙头导游词
2015/02/11 职场文书
导游带团欢迎词
2015/09/30 职场文书
导游词创作书写原则以及开场白技巧怎么学?
2019/09/25 职场文书
用Python将库打包发布到pypi
2021/04/13 Python
MySQL中一条update语句是如何执行的
2022/03/16 MySQL