Home  >  Article  >  Backend Development  >  为啥下载图片总少几个字节

为啥下载图片总少几个字节

WBOY
WBOYOriginal
2016-06-13 12:12:48925browse

为什么下载图片总少几个字节

$file_name="Koala.jpg";

if(!file_exists($file_name)){
echo "文件不存在";
return;
}

$fp=fopen($file_name,"r");

$file_size=filesize($file_name);
echo $file_size;
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);
?>

------解决思路----------------------
错误原因: 
你用文本方式打开了二进制文件 

这个问题图片处理经常遇到 要用

$file = fopen($file_name,"rb");


在操作二进制文件时如果没有指定 "b" 标记,可能会碰到一些奇怪的问题,包括坏掉的图片文件以及关于 \r\n 字符的奇怪问题。
------解决思路----------------------
跟我前段时间做的差不多,也是多几个字节,然后下载的图片打开失败
下面是解决办法,找了很久才搜到的

//代码之前(或之后)有输出,也可能被写入下载的文件中,所以下载的时候多出几个字节
//下载文件多出几个字节的解决方法是:使用ob_start();和ob_end_clean();来清除前面的输出;
        ob_end_clean();
        //http 下载需要的响应头
        header("Content-type: application/octet-stream"); //返回的文件
        header("Accept-Ranges: bytes");   //按照字节大小返回
        header("Content-length: $file_size"); //返回文件大小
        header("Content-Disposition: attachment; filename=".$name);//这里客户端的弹出对话框,对应的文件名
------解决思路----------------------
测试可以的,我只注释了 echo $file_size;

<br />$file_name="maze.png";<br /><br />if(!file_exists($file_name)){<br />echo "文件不存在";<br />return;<br />}<br /><br />$fp=fopen($file_name,"r");<br /><br />$file_size=filesize($file_name);<br />//echo $file_size;<br />header("Content-type: application/octet-stream");<br />header("Accept-Ranges: bytes");<br />header("Accept-Length: $file_size");<br />header("Content-Disposition: attachment; filename=".$file_name);<br /><br />$buffer=1024;<br />while(!feof($fp)){<br />$file_data = fread($fp,$buffer);<br /><br />echo $file_data;<br />}<br /><br /><br /><br />fclose($fp);<br />

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn