PHP使用文件流下载文件方法(附:解决下载文件内容乱码问题)
记得高中时候做过游戏私服,那时候的游戏主页是用PHP写的,因为文件很固定,客户端,登陆器和一些小工具,文件数目也不是很多,所以都是直接把下载链接写死的,直接链接到本地服务器的文件目录,今天QQ群有个朋友突然问我用文件流做PHP下载功能,顺手写了个小Demo,代码很简单,注释也全,直接上代码吧~
1、flush — 刷新输出缓冲
2、ob_clean — 清空(擦掉)输出缓冲区
此函数用来丢弃输出缓冲区中的内容。
此函数不会销毁输出缓冲区,而像 ob_end_clean() 函数会销毁输出缓冲区。
注:上面2个函数可以解决PHP下载文件内容乱码
<?php//fname为要下载的文件名//$fpath为下载文件所在文件夹,默认是downlodfunction download($fname,$fpath="download/"){//避免中文文件名出现检测不到文件名的情况,进行转码utf-8->gbk$filename=iconv('utf-8', 'gb2312', $fname);$path=$fpath.$filename;if(!file_exists($path)){//检测文件是否存在echo "文件不存在!";die();}$fp=fopen($path,'r');//只读方式打开$filesize=filesize($path);//文件大小//返回的文件(流形式)header("Content-type: application/octet-stream");//按照字节大小返回header("Accept-Ranges: bytes");//返回文件大小header("Accept-Length: $filesize");//这里客户端的弹出对话框,对应的文件名header("Content-Disposition: attachment; filename=".$filename);//================重点====================ob_clean();flush();//=================重点===================//设置分流$buffer=1024;//来个文件字节计数器$count=0;while(!feof($fp)&&($filesize-$count>0)){$data=fread($fp,$buffer);$count+=$data;//计数echo $data;//传数据给浏览器端 }fclose($fp);}download("CGEX脚本清单.doc");?>
转载于:https://www.cnblogs.com/lichenwei/p/3890684.html
PHP使用文件流下载文件方法(附:解决下载文件内容乱码问题)相关推荐
- 如何利用php下载文件_PHP使用文件流下载文件方法
1.flush - 刷新输出缓冲 2.ob_clean - 清空(擦掉)输出缓冲区 注:上面2个函数可以解决PHP下载文件内容乱码 DEMO :<?php //fname为要下载的文件名 //$ ...
- 文件流下载文件后提示不支持打开该类型文件或文件已损坏
在react项目中用到下载,请求后端接口返回文件流,前端来处理文件流生成文件后下载. 要设置responseType!! 采用的方法就是百度上随便一搜就可以搜到的Blob方法,最开始要下载的文件格式为 ...
- ajax文件流下载文件之避坑指南
公司一个老项目前端请求用的jquery的ajax,下载文件需要传用户信息所以没办法用window.location.href下载,用项目里面jquery的ajax下载,下载的压缩文件一直是下载下来解压 ...
- 用文件流下载文件( Blob)时各种类型文件的 type 整理
在 VUE 项目中,常用 Blob 二进制数据做文件下载的功能,涉及不同后缀的文件,但是每当设置转换的文件类型的时候就很头疼,因为这东西平时也不怎么常见,这里我参考 Blob 配置整理了一份,方便以后 ...
- 【Kotlin 协程】Flow 异步流 ② ( 使用 Flow 异步流持续获取不同返回值 | Flow 异步流获取返回值方式与其它方式对比 | 在 Android 中使用 Flow 异步流下载文件 )
文章目录 一.使用 Flow 异步流持续获取不同返回值 二.Flow 异步流获取返回值方式与其它方式对比 三.在 Android 中 使用 Flow 异步流下载文件 一.使用 Flow 异步流持续获取 ...
- python读取一个文件夹/子文件夹下的所有文件名字
python读取一个文件夹/子文件夹下的所有文件名字 示例代码: import osfile_path = './images/' all_file_name = os.listdir(file_pa ...
- vue 文件转换二进制_在vue中使用axios实现post方式获取二进制流下载文件(实例代码)...
需求 点击导出下载表格对应的excel文件 在 vue 项目中,使用的 axios ,后台 java 提供的 post 接口 api 实现 第一步,在 axios 请求中加入参数,表示接收的数据为二进 ...
- 如何快速恢复误删文件?文件误删的恢复方法-附软件
来源:https://blog.yoodb.com/yoodb/article/detail/1606 怎么快速恢复删除文件?俗话说覆水难收,其实很多人也认为如果将文件删除了,就如同泼出去的谁,是很难 ...
- Winform中实现向窗体中拖放照片并显示以及拖放文件夹显示树形结构(附代码下载)
场景 向窗体中拖拽照片并显示效果 向窗体中拖拽文件夹并显示树形结构效果 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 ...
最新文章
- java编写最大公约数_Java编写最大公约数和最小公倍数
- 实现延时任务的 4 种实现方案!
- 【PAT】A1028 List Sorting
- VS2008 连接 SAP 4.6C RFC 经验分享(折腾了两天)
- bzoj3729-Gty的游戏【Splay,博弈论】
- 提高篇 第五部分 动态规划 第6章 斜率优化动态规划
- 【数据结构笔记35】C实现:有序子列的归并算法:递归与非递归的实现
- java中堆栈内存_Java堆空间与堆栈– Java中的内存分配
- 未来10年,将被人工智能/机器学习/大数据颠覆的三大行业
- SpringBoot结合ActiveMQ(同时支持Queue和Topic)
- VS2010与.NET4系列 13. ASP.NET 4 SEO 改进
- 深度剖析Java集合之BitSet
- 7-5 有理数比较 (10 分)
- pythonpil安装教程_成功安装PIL步骤
- linux 无线网卡驱动 centrino 6200 agn,下载:Intel无线网卡驱动14.2官方正式版
- mysql 1677_【MySQL】Error Code:1677处理过程小记
- 微信聊天记录内的文件删除了怎么恢复?
- Java 中finalize()方法起什么作用呢?
- python将panadas写入excel_python pandas写入excel文件的方法示例
- 申宝在线炒股北交所新股表现抢眼
热门文章
- java set的first_Java Pair.setFirst方法代码示例
- calendar前推n天_Shell获取ES3天的索引列表进行迁移操作
- mysql 查询执行过程_深入浅出Mysql(一)——sql查询执行过程
- 数学--博弈论--巴什博奕(Bash Game)
- 训练神经网络适合使用交叉熵(cross_entropy)错误率,而不是分类错误率或是均方差
- Windows XP 系统 使用笔记一
- 内核中引发bug并打印信息
- Cygwin下安装Android NDK
- 人造肉真的上市了,这对养殖业会有什么影响?
- 蚂蚁借呗和京东金条全面对比,哪个更划算?