欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

为啥下载的文件会是损坏的额 这是什么问题? 求大神什么的

程序员文章站 2022-06-12 14:46:35
...
function f($file_name,$file_path){
$file_name=$_SERVER['DOCUMENT_ROOT'].$file_path.$file_name;
$file_path=iconv("utf-8","gb2312",$file_name);
if(!file_exists($file_path))
// if(!file_exists($file_name))
{
echo "不存在";
return ;
}
$fp=fopen($file_path,"r");
$file_size=filesize($file_path);

header("Content-type: application/octet-stream");
header("Accept-Ranges:bytes");
header("Accept-Length:$file_size");
header("Content-Disposition: attachment;filename=".$file_name);
$buffer=1024;
while(!feof($fp))
{
$file_data=fread($fp,$buffer);
echo $file_data;
}
fclose($fp);
}
f("qq.jpg","/");
为啥下载的文件会是损坏的额??
为啥下载的文件会是损坏的额??
为啥下载的文件会是损坏的额??
为啥下载的文件会是损坏的额??
为啥下载的文件会是损坏的额??


回复讨论(解决方案)

经测试,没有问题。

为啥我的不行

迅雷什么的?有可能文件下载回来不完整

那个图片打开来没问题的 ,就是用这测试的代码 下载的就不行

截个图看看。

另外,你是用什么打开的。代码运行环境是?

测试过,一切正常。

win7的图片查看器

谷歌浏览器 apache php5.3

E/Apache/htdocs 目录下存在qq.jpg文件吗?

是的 就是看不到....

用记事本打开图片文件,看看有什么。

一堆乱码

你的代码中有 $file_path=iconv("utf-8","gb2312",$file_name);
表示你的 php 工作在 window 系统中

而 window 系统是严格区分文本文件和二进制文件的
而你却用 $fp=fopen($file_path,"r"); 以文本方式打开二进制文件

于是,因为你违规了,所以得不到正确的结果

你需要用二进制方式打开二进制文件 $fp=fopen($file_path,"r b");

另外,你的 utf-8 编码的程序文件,需要以无 BOM 头的格式进行保存

谢谢了, 换成无BOM头的格式保存就可以了