Heim  >  Artikel  >  Backend-Entwicklung  >  为啥下载的文件会是损坏的额? 这是什么有关问题? 求大神什么的

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

WBOY
WBOYOriginal
2016-06-13 12:15:371009Durchsuche

为啥下载的文件会是损坏的额?? 这是什么问题??????? 求大神什么的
 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","/");
为啥下载的文件会是损坏的额??
为啥下载的文件会是损坏的额??
为啥下载的文件会是损坏的额??
为啥下载的文件会是损坏的额??
为啥下载的文件会是损坏的额??
------解决思路----------------------
经测试,没有问题。
------解决思路----------------------
迅雷什么的?有可能文件下载回来不完整
------解决思路----------------------
截个图看看。

另外,你是用什么打开的。代码运行环境是?
------解决思路----------------------
测试过,一切正常。
------解决思路----------------------
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,"rb");

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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn