基于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 相关文章推荐
PHP5在Apache下的两种模式的安装
Sep 05 PHP
PHP中在数据库中保存Checkbox数据(2)
Oct 09 PHP
PHP 5.0 Pear安装方法
Dec 06 PHP
亲密接触PHP之PHP语法学习笔记1
Dec 17 PHP
php Rename 更改文件、文件夹名称
May 24 PHP
php通过rmdir删除目录的简单用法
Mar 18 PHP
PHP实现清除wordpress里恶意代码
Oct 21 PHP
基于PHPexecl类生成复杂的报表表头示例
Oct 14 PHP
PHP设计模式之原型模式定义与用法详解
Apr 03 PHP
PHP+redis实现的悲观锁机制示例
Jun 12 PHP
PHP递归的三种常用方式
Feb 28 PHP
Laravel5.1框架注册中间件的三种场景详解
Jul 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
深入php var_dump()函数的详解
2013/06/05 PHP
PHP的基本常识小结
2013/07/05 PHP
PHP strip_tags()去除HTML、XML以及PHP的标签介绍
2014/02/18 PHP
PHP使用file_get_contents发送http请求功能简单示例
2018/04/29 PHP
PHP单例模式数据库连接类与页面静态化实现方法
2019/03/20 PHP
php把文件设置为插件的技巧方法
2020/02/03 PHP
javascript操作cookie的文章(设置,删除cookies)
2010/04/01 Javascript
一款js和css代码压缩工具[附JAVA环境配置方法]
2010/04/16 Javascript
suggestion开发小结以及对键盘事件的总结(针对中文输入法状态)
2011/12/20 Javascript
仿中关村在线首页弹出式广告插件(jQuery版)
2012/05/03 Javascript
调整小数的格式保留小数点后两位
2014/05/14 Javascript
asp.net+js实现金额格式化
2015/02/27 Javascript
JavaScript访问字符串中单个字符的两种方法
2015/07/03 Javascript
jquery 动态合并单元格的实现方法
2016/08/26 Javascript
全面解析Bootstrap表单样式的使用
2016/09/09 Javascript
Vue 2.0中生命周期与钩子函数的一些理解
2017/05/09 Javascript
jQuery Masonry瀑布流布局神器使用详解
2017/05/25 jQuery
使用ionic(选项卡栏tab) icon(图标) ionic上拉菜单(ActionSheet) 实现通讯录界面切换实例代码
2017/10/20 Javascript
bootstrap表格内容过长时用省略号表示的解决方法
2017/11/21 Javascript
从零开始搭建一个react项目开发
2018/02/09 Javascript
深入浅析Vue中的Prop
2018/06/10 Javascript
关于vue的npm run dev和npm run build的区别介绍
2019/01/14 Javascript
Layui 带多选框表格监听事件以及按钮自动点击写法实例
2019/09/02 Javascript
ant-design-vue 时间选择器赋值默认时间的操作
2020/10/27 Javascript
Python编程之多态用法实例详解
2015/05/19 Python
解决python3在anaconda下安装caffe失败的问题
2017/06/15 Python
Pycharm使用之设置代码字体大小和颜色主题的教程
2019/07/12 Python
Python企业编码生成系统总体系统设计概述
2019/07/26 Python
python模拟哔哩哔哩滑块登入验证的实现
2020/04/24 Python
TensorFlow保存TensorBoard图像操作
2020/06/23 Python
如何利用cmp命令比较文件
2016/04/11 面试题
思想品德自我评价
2014/02/04 职场文书
房屋买卖协议书
2014/04/10 职场文书
乐观自信演讲稿范文
2014/05/21 职场文书
收入证明申请书
2015/06/12 职场文书
Python pandas求方差和标准差的方法实例
2021/08/04 Python