基于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中strtotime函数使用方法分享
Jan 10 PHP
使用PHP生成二维码的两种方法(带logo图像)
Mar 14 PHP
Linux下手动编译安装PHP扩展的例子分享
Jul 15 PHP
php结合js实现点击超链接执行删除确认操作
Oct 31 PHP
php实现只保留mysql中最新1000条记录
Jun 18 PHP
PHP中使用foreach()遍历二维数组的简单实例
Jun 13 PHP
php中的抽象方法和抽象类
Feb 14 PHP
PHP实现基于栈的后缀表达式求值功能
Nov 10 PHP
ThinkPHP中获取指定日期后工作日的具体日期方法
Oct 14 PHP
PHP中抽象类,接口功能、定义方法示例
Feb 26 PHP
PHP实现将上传图片自动缩放到指定分辨率,并保持清晰度封装类示例
Jun 17 PHP
详解PHP中curl_multi并发的实现
Jun 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 表单提交大量数据发生丢失的解决方法
2014/03/03 PHP
php将html转成wml的WAP标记语言实例
2015/07/08 PHP
PHP 文件上传后端处理实用技巧方法
2017/01/06 PHP
实例讲解YII2中多表关联的使用方法
2017/07/21 PHP
PHP实现统计代码行数小工具
2019/09/19 PHP
PHP设计模式之适配器模式(Adapter)原理与用法详解
2019/12/12 PHP
JavaScript中为什么null==0为false而null大于=0为true(个人研究)
2013/09/16 Javascript
中文输入法不触发onkeyup事件的解决办法
2014/07/09 Javascript
全屏js头像上传插件源码高清版
2016/03/29 Javascript
jquery 将当前时间转换成yyyymmdd格式的实现方法
2016/06/01 Javascript
自学实现angularjs依赖注入
2016/12/20 Javascript
React.js中常用的ES6写法总结(推荐)
2017/05/09 Javascript
AnglarJs中的上拉加载实现代码
2018/02/08 Javascript
通过函数作用域和块级作用域看javascript的作用域链
2018/08/05 Javascript
JavaScript使用享元模式实现文件上传优化操作示例
2018/08/07 Javascript
Vue2.x通用条件搜索组件的封装及应用详解
2019/05/28 Javascript
Vue程序调试的方法
2019/06/17 Javascript
聊聊鉴权那些事(推荐)
2019/08/22 Javascript
基于javascript处理nginx请求过程详解
2020/07/07 Javascript
python根据距离和时长计算配速示例
2014/02/16 Python
python集合类型用法分析
2015/04/08 Python
对pandas中时间窗函数rolling的使用详解
2018/11/28 Python
说说如何遍历Python列表的方法示例
2019/02/11 Python
django模板加载静态文件的方法步骤
2019/03/01 Python
浅谈python图片处理Image和skimage的区别
2019/08/04 Python
Python 70行代码实现简单算式计算器解析
2019/08/30 Python
使用python客户端访问impala的操作方式
2020/03/28 Python
python中操作文件的模块的方法总结
2021/02/04 Python
书香校园活动方案
2014/02/28 职场文书
后勤管理员岗位职责
2014/08/27 职场文书
公共艺术专业自荐信
2014/09/01 职场文书
质量整改报告范文
2014/11/08 职场文书
病人家属写给医院的感谢信
2015/01/23 职场文书
2015年社区反邪教工作总结
2015/10/14 职场文书
2016庆祝国庆67周年宣传语
2015/11/25 职场文书
mongodb清除连接和日志的正确方法分享
2021/09/15 MongoDB