当前位置: 代码迷 >> PHP >> 为啥下载图片总少几个字节
  详细解决方案

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

热度:82   发布时间:2016-04-28 18:02:02.0
为什么下载图片总少几个字节
<?php

$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;

$file_name="maze.png";

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);
  相关解决方案