基于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通过session id 实现session共享和登录验证的代码
Jun 03 PHP
PHP PDOStatement:bindParam插入数据错误问题分析
Nov 13 PHP
wordpress自定义url参数实现路由功能的代码示例
Nov 28 PHP
php foreach正序倒序输出示例代码
Jul 01 PHP
PHP动态页生成静态页的3种常用方法
Nov 13 PHP
学习php设计模式 php实现装饰器模式(decorator)
Dec 07 PHP
php同时使用session和cookie来保存用户登录信息的实现代码
May 13 PHP
深入讲解PHP的对象注入(Object Injection)
Mar 01 PHP
php脚本守护进程原理与实现方法详解
Jul 20 PHP
PHP扩展mcrypt实现的AES加密功能示例
Jan 29 PHP
Thinkphp5框架ajax接口实现方法分析
Aug 28 PHP
浅谈PHP5.6 与 PHP7.0 区别
Oct 09 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
smtp邮件发送一例
2006/10/09 PHP
基于PHP异步执行的常用方式详解
2013/06/03 PHP
PHP轻量级数据库操作类Medoo增加、删除、修改、查询例子
2014/07/04 PHP
php删除左端与右端空格的方法
2014/11/29 PHP
jQuery 隔行换色 支持键盘上下键,按Enter选定值
2009/08/02 Javascript
用javascript获取当页面上鼠标光标位置和触发事件的对象的代码
2009/12/09 Javascript
jQuery EasyUI API 中文文档 - TimeSpinner时间微调器
2011/10/23 Javascript
JQuery 图片的展开和伸缩实例讲解
2013/04/18 Javascript
如何让页面加载完成后执行js
2013/06/26 Javascript
js图片延迟加载的实现方法及思路
2013/07/22 Javascript
node.js中使用socket.io制作命名空间
2014/12/15 Javascript
jQueryUI DatePicker 添加时分秒
2016/06/04 Javascript
基于KO+BootStrap+MVC实现的分页控件代码分享
2016/11/07 Javascript
深入理解 JavaScript 中的 JSON
2017/04/06 Javascript
使用ngrok+express解决本地环境中微信接口调试问题
2018/02/26 Javascript
详解vue中axios的使用与封装
2019/03/20 Javascript
vue keep-alive 动态删除组件缓存的例子
2019/11/04 Javascript
js实现登录拖拽窗口
2020/02/10 Javascript
Vue单文件组件开发实现过程详解
2020/07/30 Javascript
在Python中处理日期和时间的基本知识点整理汇总
2015/05/22 Python
详解Python 数据库的Connection、Cursor两大对象
2018/06/25 Python
python读取图片任意范围区域
2019/01/23 Python
Python+appium框架原生代码实现App自动化测试详解
2020/03/06 Python
Pytorch 使用CNN图像分类的实现
2020/06/16 Python
Python装饰器如何实现修复过程解析
2020/09/05 Python
python Yaml、Json、Dict之间的转化
2020/10/19 Python
HTML5 Notification(桌面提醒)功能使用实例
2014/03/17 HTML / CSS
英国儿童设计师服装的领先零售商:Base
2019/03/17 全球购物
企业元宵节主持词
2014/03/25 职场文书
公司担保书范文
2014/05/21 职场文书
教师一帮一活动总结
2014/07/08 职场文书
民族精神月活动总结
2014/08/28 职场文书
党课培训心得体会
2014/09/02 职场文书
中秋节国旗下演讲稿
2014/09/05 职场文书
手机被没收的检讨书
2014/10/04 职场文书
德生BCL3000抢先使用感受和评价
2022/04/07 无线电