记得高中时候做过游戏私服,那时候的游戏主页是用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使用文件流下载文件方法(附:解决下载文件内容乱码问题)相关推荐

  1. 如何利用php下载文件_PHP使用文件流下载文件方法

    1.flush - 刷新输出缓冲 2.ob_clean - 清空(擦掉)输出缓冲区 注:上面2个函数可以解决PHP下载文件内容乱码 DEMO :<?php //fname为要下载的文件名 //$ ...

  2. 文件流下载文件后提示不支持打开该类型文件或文件已损坏

    在react项目中用到下载,请求后端接口返回文件流,前端来处理文件流生成文件后下载. 要设置responseType!! 采用的方法就是百度上随便一搜就可以搜到的Blob方法,最开始要下载的文件格式为 ...

  3. ajax文件流下载文件之避坑指南

    公司一个老项目前端请求用的jquery的ajax,下载文件需要传用户信息所以没办法用window.location.href下载,用项目里面jquery的ajax下载,下载的压缩文件一直是下载下来解压 ...

  4. 用文件流下载文件( Blob)时各种类型文件的 type 整理

    在 VUE 项目中,常用 Blob 二进制数据做文件下载的功能,涉及不同后缀的文件,但是每当设置转换的文件类型的时候就很头疼,因为这东西平时也不怎么常见,这里我参考 Blob 配置整理了一份,方便以后 ...

  5. 【Kotlin 协程】Flow 异步流 ② ( 使用 Flow 异步流持续获取不同返回值 | Flow 异步流获取返回值方式与其它方式对比 | 在 Android 中使用 Flow 异步流下载文件 )

    文章目录 一.使用 Flow 异步流持续获取不同返回值 二.Flow 异步流获取返回值方式与其它方式对比 三.在 Android 中 使用 Flow 异步流下载文件 一.使用 Flow 异步流持续获取 ...

  6. python读取一个文件夹/子文件夹下的所有文件名字

    python读取一个文件夹/子文件夹下的所有文件名字 示例代码: import osfile_path = './images/' all_file_name = os.listdir(file_pa ...

  7. vue 文件转换二进制_在vue中使用axios实现post方式获取二进制流下载文件(实例代码)...

    需求 点击导出下载表格对应的excel文件 在 vue 项目中,使用的 axios ,后台 java 提供的 post 接口 api 实现 第一步,在 axios 请求中加入参数,表示接收的数据为二进 ...

  8. 如何快速恢复误删文件?文件误删的恢复方法-附软件

    来源:https://blog.yoodb.com/yoodb/article/detail/1606 怎么快速恢复删除文件?俗话说覆水难收,其实很多人也认为如果将文件删除了,就如同泼出去的谁,是很难 ...

  9. Winform中实现向窗体中拖放照片并显示以及拖放文件夹显示树形结构(附代码下载)

    场景 向窗体中拖拽照片并显示效果 向窗体中拖拽文件夹并显示树形结构效果 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 ...

最新文章

  1. java编写最大公约数_Java编写最大公约数和最小公倍数
  2. 实现延时任务的 4 种实现方案!
  3. 【PAT】A1028 List Sorting
  4. VS2008 连接 SAP 4.6C RFC 经验分享(折腾了两天)
  5. bzoj3729-Gty的游戏【Splay,博弈论】
  6. 提高篇 第五部分 动态规划 第6章 斜率优化动态规划
  7. 【数据结构笔记35】C实现:有序子列的归并算法:递归与非递归的实现
  8. java中堆栈内存_Java堆空间与堆栈– Java中的内存分配
  9. 未来10年,将被人工智能/机器学习/大数据颠覆的三大行业
  10. SpringBoot结合ActiveMQ(同时支持Queue和Topic)
  11. VS2010与.NET4系列 13. ASP.NET 4 SEO 改进
  12. 深度剖析Java集合之BitSet
  13. 7-5 有理数比较 (10 分)
  14. pythonpil安装教程_成功安装PIL步骤
  15. linux 无线网卡驱动 centrino 6200 agn,下载:Intel无线网卡驱动14.2官方正式版
  16. mysql 1677_【MySQL】Error Code:1677处理过程小记
  17. 微信聊天记录内的文件删除了怎么恢复?
  18. Java 中finalize()方法起什么作用呢?
  19. python将panadas写入excel_python pandas写入excel文件的方法示例
  20. 申宝在线炒股北交所新股表现抢眼

热门文章

  1. java set的first_Java Pair.setFirst方法代码示例
  2. calendar前推n天_Shell获取ES3天的索引列表进行迁移操作
  3. mysql 查询执行过程_深入浅出Mysql(一)——sql查询执行过程
  4. 数学--博弈论--巴什博奕(Bash Game)
  5. 训练神经网络适合使用交叉熵(cross_entropy)错误率,而不是分类错误率或是均方差
  6. Windows XP 系统 使用笔记一
  7. 内核中引发bug并打印信息
  8. Cygwin下安装Android NDK
  9. 人造肉真的上市了,这对养殖业会有什么影响?
  10. 蚂蚁借呗和京东金条全面对比,哪个更划算?