Maison > développement back-end > tutoriel php > 为啥下载的文件会是损坏的额? 这是什么有关问题? 求大神什么的

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

WBOY
Libérer: 2016-06-13 12:15:37
original
1054 Les gens l'ont consulté

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

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal