基于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小偷相关截取函数备忘
Nov 28 PHP
php ajax 静态分页过程形式
Sep 02 PHP
php分页函数示例代码分享
Feb 24 PHP
在PHP中使用X-SendFile头让文件下载更快
Jun 01 PHP
PHP批量生成图片缩略图的方法
Jun 18 PHP
使用图灵api创建微信聊天机器人
Jul 23 PHP
PHP中的静态变量及static静态变量使用详解
Nov 05 PHP
实例详解PHP中html word 互转的方法
Jan 28 PHP
Yaf框架封装的MySQL数据库操作示例
Mar 06 PHP
Laravel5框架自定义错误页面配置操作示例
Apr 17 PHP
php解决crontab定时任务不能写入文件问题的方法分析
Sep 16 PHP
PHP 实现 WebSocket 协议原理与应用详解
Apr 22 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
根德Grundig S400/S500/S700电路分析
2021/03/02 无线电
实例(Smarty+FCKeditor新闻系统)
2007/01/02 PHP
PHP读取RSS(Feed)简单实例
2014/06/12 PHP
thinkphp关于简单的权限判定方法
2017/04/03 PHP
PHP实现图片的等比缩放和Logo水印功能示例
2017/05/04 PHP
详细解读php的命名空间(一)
2018/02/21 PHP
在chrome浏览器中,防止input[text]和textarea在聚焦时出现黄色边框的解决方法
2011/05/24 Javascript
利用js判断浏览器类型(是否为IE,Firefox,Opera浏览器)
2013/11/22 Javascript
js的hasownproperty使用示例
2014/03/02 Javascript
MVC+jQuery.Ajax异步实现增删改查和分页
2020/12/22 Javascript
jQuery中 $ 符号的冲突问题及解决方案
2016/11/04 Javascript
Bootstrap CSS组件之下拉菜单(dropdown)
2016/12/17 Javascript
谈谈JavaScript中浏览器兼容问题的写法小议
2016/12/17 Javascript
jQuery插件HighCharts实现的2D条状图效果示例【附demo源码下载】
2017/03/15 Javascript
node.js实现登录注册页面
2017/04/08 Javascript
基于vue2.x的电商图片放大镜插件的使用
2018/01/22 Javascript
vue最简单的前后端交互示例详解
2018/10/11 Javascript
JS实现继承的几种常用方式示例
2019/06/22 Javascript
Vue 解决父组件跳转子路由后当前导航active样式消失问题
2020/07/21 Javascript
python中查看变量内存地址的方法
2015/05/05 Python
python实现桌面托盘气泡提示
2019/07/29 Python
python生成器/yield协程/gevent写简单的图片下载器功能示例
2019/10/28 Python
Python3 shutil(高级文件操作模块)实例用法总结
2020/02/19 Python
python程序文件扩展名知识点详解
2020/02/27 Python
Python3 filecmp模块测试比较文件原理解析
2020/03/23 Python
python实现画图工具
2020/08/27 Python
浅析数据存储的三种方式 cookie sessionstorage localstorage 的异同
2020/06/04 HTML / CSS
美国便宜的横幅和标志印刷在线:Best of Signs
2019/05/29 全球购物
酒店管理专业毕业生推荐信
2013/11/10 职场文书
高二地理教学反思
2014/01/24 职场文书
个人优缺点自我评价
2014/01/27 职场文书
家长给孩子的评语
2014/01/30 职场文书
晨会主持词
2014/03/17 职场文书
大学生作弊检讨书
2014/09/11 职场文书
2014年最新学校运动会广播稿
2014/09/17 职场文书
婚礼家长致辞
2015/07/27 职场文书