基于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 相关文章推荐
Mysql的常用命令
Oct 09 PHP
PHP字符串 ==比较运算符的副作用
Oct 21 PHP
《PHP编程最快明白》第六讲:Mysql数据库操作
Nov 01 PHP
PHP错误抑制符(@)导致引用传参失败Bug的分析
May 02 PHP
php查询whois信息的方法
Jun 08 PHP
php如何获取文件的扩展名
Oct 28 PHP
深入解析WordPress中加载模板的get_template_part函数
Jan 11 PHP
Symfony2框架创建项目与模板设置实例详解
Mar 17 PHP
php分页原理 分页代码 分页类制作教程
Sep 23 PHP
php is_executable判断给定文件名是否可执行实例
Sep 26 PHP
PHP APP微信提现接口代码
Sep 30 PHP
php新建文件的方法实例
Sep 26 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移动文件指针ftell()、fseek()、rewind()函数总结
2014/11/18 PHP
ExtJS 2.2.1的grid控件在ie6中的显示问题
2009/05/04 Javascript
Javascript 模式实例 观察者模式
2009/10/24 Javascript
在网页中使用document.write时遭遇的奇怪问题
2010/08/24 Javascript
ExtJs动态生成treepanel的Json格式
2015/07/19 Javascript
JavaScript编程中window的location与history对象详解
2015/10/26 Javascript
Bootstrap Fileinput文件上传组件用法详解
2016/05/10 Javascript
详解Node.js串行化流程控制
2017/05/04 Javascript
Require.js的基本用法详解
2017/07/03 Javascript
jQuery操作DOM_动力节点Java学院整理
2017/07/04 jQuery
基于BootStrap实现简洁注册界面
2017/07/20 Javascript
加载 vue 远程代码的组件实例详解
2017/11/20 Javascript
关于Google发布的JavaScript代码规范你要知道哪些
2018/04/04 Javascript
JS实现自定义弹窗功能
2018/08/08 Javascript
JS实现点击按钮随机生成可拖动的不同颜色块示例
2019/01/30 Javascript
更优雅的微信小程序骨架屏实现详解
2019/08/07 Javascript
对Layer弹窗使用及返回数据接收的实例详解
2019/09/26 Javascript
在微信小程序中渲染HTML内容3种解决方案及分析与问题解决
2020/01/12 Javascript
[50:15]VP vs Mineski 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
Python基础篇之初识Python必看攻略
2016/06/23 Python
为什么选择python编程语言入门黑客攻防 给你几个理由!
2018/02/02 Python
python实现k-means聚类算法
2018/02/23 Python
树莓派采用socket方式文件传输(python)
2019/06/22 Python
Pycharm简单使用教程(入门小结)
2019/07/04 Python
Django 请求Request的具体使用方法
2019/11/11 Python
Python动态强类型解释型语言原理解析
2020/03/25 Python
Python Tricks 使用 pywinrm 远程控制 Windows 主机的方法
2020/07/21 Python
说一下Linux下有关用户和组管理的命令
2014/08/18 面试题
自荐书4要点
2014/01/25 职场文书
小学班主任寄语大全
2014/04/04 职场文书
2014年党员教师自我剖析材料
2014/09/30 职场文书
小学老师对学生的评语
2014/12/29 职场文书
2015纪念九一八事变84周年演讲稿
2015/03/19 职场文书
交心谈心活动总结
2015/05/11 职场文书
SQL注入的实现以及防范示例详解
2021/06/02 MySQL
win7配置本地ftp服务器的图文教程
2022/08/05 Servers