PHP使用文件流下载文件方法(附:解决下载文件内容乱码问题)
2024-10-19 02:22:05
1、flush — 刷新输出缓冲
2、ob_clean — 清空(擦掉)输出缓冲区
此函数用来丢弃输出缓冲区中的内容。
此函数不会销毁输出缓冲区,而像 ob_end_clean() 函数会销毁输出缓冲区。
注:上面2个函数可以解决PHP下载文件内容乱码
代码如下
// 文件名不要用中文
//fname为要下载的文件名
//$fpath为下载文件所在文件夹,默认是downlod
function 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");
最新文章
- javaScript 查询字符串参数 获取
- Hover.css:一组超实用的 CSS3 悬停效果和动画
- 两个数据库表同步的可视化WEB同步程序
- 支付宝支付错误 系统忙:错误代码AE150002999
- Java历程-初学篇 Day09 冒泡排序
- 如何获取离线安装Chrome扩展程序的包
- [apache2.4]configure: error: APR not found. Please read the documentation.
- Mysql基本命令及数据库存储位置
- 关于flex布局【转】
- CentOS6.8合并DVD1和DVD2作为本地yum源
- centos 6.9安装python 3.6
- 在window下搭建Vue.Js开发环境
- 关于netcore 发布到服务器的准备
- AJAX之发送GET请求
- jQuery之禁止Get请求缓存
- WPF后台线程更新UI
- android 学习过程中登陆失效的个人理解
- redis几种数据类型以及使用场景
- OpenJudge——0003:jubeeeeeat
- DataTrigger
热门文章
- 自学Python2.7-collections系列
- C#应用程序隐藏调用bat脚本
- 【java】计算一段代码执行时长java.lang.System类里的public static long currentTimeMillis()方法
- TCP/IP的那些事--子网掩码
- loadrunner录制、加载以及分析过程
- cell上添加倒计时,以及时差问题的解决
- Slf4j与其他日志系统兼容的使用
- Sublime Text 2 Plugin Installation
- Error in library(DESeq2) : 不存在叫‘DESeq2’这个名字的程辑包
- Xamarin 简单的网络请求