错误原因: 
你用文本方式打开了二进制文件 这个问题图片处理经常遇到 要用$file = fopen($file_name,"rb");
在操作二进制文件时如果没有指定 "b" 标记,可能会碰到一些奇怪的问题,包括坏掉的图片文件以及关于 \r\n 字符的奇怪问题。

解决方案 »

  1.   

    跟我前段时间做的差不多,也是多几个字节,然后下载的图片打开失败
    下面是解决办法,找了很久才搜到的//代码之前(或之后)有输出,也可能被写入下载的文件中,所以下载的时候多出几个字节
    //下载文件多出几个字节的解决方法是:使用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);//这里客户端的弹出对话框,对应的文件名
      

  2.   

    测试可以的,我只注释了 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);