基于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 相关文章推荐
详解:――如何将图片储存在数据库里
Dec 05 PHP
常用的php对象类型判断
Aug 27 PHP
php array的学习笔记
May 16 PHP
php实现文件下载更能介绍
Nov 23 PHP
解析PHP工厂模式的好处
Jun 18 PHP
Zend studio文件注释模板设置方法
Sep 29 PHP
简单实用的.net DataTable导出Execl
Oct 28 PHP
CI使用Tank Auth转移数据库导致密码用户错误的解决办法
Jun 12 PHP
CI框架中通过hook的方式实现简单的权限控制
Jan 07 PHP
基于ThinkPHP实现批量删除
Dec 18 PHP
PHP与服务器文件系统的简单交互
Oct 21 PHP
Laravel5.5 视图 - 创建视图和数据传递示例
Oct 21 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中的Class的几点个人看法
2006/10/09 PHP
php中根据某年第几天计算出日期年月日的代码
2011/02/24 PHP
PHP 代码规范小结
2012/03/08 PHP
php中json_decode()和json_encode()的使用方法
2012/06/04 PHP
基于php-fpm 参数的深入理解
2013/06/03 PHP
如何用php获取文件名后缀
2013/06/09 PHP
php通过前序遍历树实现无需递归的无限极分类
2015/07/10 PHP
Thinkphp框架开发移动端接口(2)
2016/08/18 PHP
PHP利用Socket获取网站的SSL证书与公钥
2017/06/18 PHP
如何在Mozilla Gecko 用Javascript加载XSL
2007/01/09 Javascript
javascript背投广告代码的完善
2008/04/08 Javascript
跨浏览器的 mouseenter mouseleave 以及 compareDocumentPosition的使用说明
2010/05/04 Javascript
js弹出层包含flash 不能关闭隐藏的2种处理方法
2013/06/17 Javascript
Jquery $.getJSON 在IE下的缓存问题解决方法
2014/10/10 Javascript
JavaScript Math.ceil 方法(对数值向上取整)
2015/01/09 Javascript
JS扩展方法实例分析
2015/04/15 Javascript
基于JavaScript实现鼠标箭头移动图片跟着移动
2016/08/30 Javascript
使用JavaScript实现链表的数据结构的代码
2017/08/02 Javascript
[04:00]黄浦江畔,再会英雄——完美世界DOTA2 TI9应援视频
2019/07/31 DOTA
Python之父谈Python的未来形式
2016/07/01 Python
详谈Python基础之内置函数和递归
2017/06/21 Python
Python3 处理JSON的实例详解
2017/10/29 Python
解决Django的request.POST获取不到内容的问题
2018/05/28 Python
python跳过第一行快速读取文件内容的实例
2018/07/12 Python
Ubuntu18.04下python版本完美切换的解决方法
2019/06/14 Python
如何在Win10系统使用Python3连接Hive
2020/10/15 Python
css3动画效果小结(推荐)
2016/07/25 HTML / CSS
TCP协议通讯的过程和步骤是什么
2015/10/18 面试题
论文评语大全
2014/04/29 职场文书
社区科普工作方案
2014/06/03 职场文书
测控技术自荐信
2014/06/05 职场文书
2014年入党积极分子学习三中全会思想汇报
2014/09/13 职场文书
学生抄袭作业的检讨书
2014/10/02 职场文书
运动会1000米加油稿
2015/07/21 职场文书
python实现图片九宫格分割的示例
2021/04/25 Python
MATLAB 全景图切割及盒图显示的实现步骤
2021/05/14 Python