发布网友 发布时间:2022-04-06 02:48
共1个回答
热心网友 时间:2022-04-06 04:17
public function download()
{
header("Content-Type:text/html; charset=gb2312");
if(isset($_GET['name']))
{
$name=$_GET['name'];
}
$s=$_SERVER['DOCUMENT_ROOT'];
$file_name=$s."/thinkphp/Uploads/".$name;
$file_name=iconv("utf-8","gb2312",$file_name);//中文转码
//1.打开文件
if(!file_exists($file_name)){
echo "文件不存在";
}
else {
$fp=fopen($file_name,'rb');
ob_clean();
//2、获取文件大小
$file_size=filesize($file_name);
header("Content-type: application/octet-stream");//告诉浏览器返回的是文件数据
header("Accept-Ranges: bytes");//以字节方式返回
header("Accept-Length: $file_size");//
//3.客户端弹出的对话框的文件名称
header("Content-Disposition: attachment; filename=".$name);
//4、读取到缓存
$buffer=1024;
$file_count=0;
while(!feof($fp) && $file_size-$file_count>0)//文件未到结尾
{
$file_data=fread($fp,$buffer);
$file_count+=strlen($data);
echo $file_data;
}
//6.关闭
fclose($fp);
}
}
度娘之~~~发现好像是BOM的问题,然后改变编码格式为utf-8无BOM格式,上传之后问题仍旧。
最后添加ob_clean();问题解决
网上的解释:
ob_clean这个函数的作用就是用来丢弃输出缓冲区中的内容,如果你的网站有许多生成的图片类文件,那么想要访问正确,就要经常清除缓冲区。