首页 > 后端开发 > php教程 > 为啥下载的文件会是损坏的额? 这是什么有关问题? 求大神什么的

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

WBOY
发布: 2016-06-13 12:15:37
原创
1055 人浏览过

为啥下载的文件会是损坏的额?? 这是什么问题??????? 求大神什么的
 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 头的格式进行保存

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板