php图片下载后提示文件有错误

我用php写了一个文件下载程序,文件上传后将文件信息存入数据库,下载前先去数据库中将信息取出后再下载。可是下载后的图片打不开,总是提示文件有错误。请各位朋友赐教。代码如下:
$root = $_SERVER['DOCUMENT_ROOT'];
$name = $root . '/' . $u->getNewName();//newName是上传后在库中保存的名字
$file_size = filesize($name);
$displayName = iconv("utf-8","gb2312",$u->getOldName());oldName是文件的原名字,同时显示 在下载框中
header("Content-Type:application/octet-stream");
header("Accept-Ranges:bytes");
header("Accept-Length:".$file_size);
header("Content-Disposition:attachment;filename=".$displayName);
$buffer = 256;
$file_count = 0;
$fp = fopen($name,'r');
while (!feof($fp) && $file_size - $file_count > 0) {
$content = fread($fp,$buffer);
$file_count += $buffer;
echo $content;
}
fclose($fp);
谢谢各位朋友的回答!
}

public function download()
{
header("Content-Type:text/html; charset=gb2312");
if(isset($_GET['name']))
{
$name=$_GET['name'];
}
$s=$_SERVER['DOCUMENT_ROOT'];
$file_name=$s."/thinkphp/Uploads/".$name;
$file_name=iconv("utf-8","gb2312",$file_name);//中文转码
//1.打开文件
if(!file_exists($file_name)){
echo "文件不存在";
}
else {
$fp=fopen($file_name,'rb');
ob_clean();
//2、获取文件大小
$file_size=filesize($file_name);
header("Content-type: application/octet-stream");//告诉浏览器返回的是文件数据
header("Accept-Ranges: bytes");//以字节方式返回
header("Accept-Length: $file_size");//
//3.客户端弹出的对话框的文件名称
header("Content-Disposition: attachment; filename=".$name);
//4、读取到缓存
$buffer=1024;
$file_count=0;
while(!feof($fp) && $file_size-$file_count>0)//文件未到结尾
{
$file_data=fread($fp,$buffer);
$file_count+=strlen($data);
echo $file_data;
}
//6.关闭
fclose($fp);
}
}

度娘之~~~发现好像是BOM的问题,然后改变编码格式为utf-8无BOM格式,上传之后问题仍旧。
最后添加ob_clean();问题解决
网上的解释:

ob_clean这个函数的作用就是用来丢弃输出缓冲区中的内容,如果你的网站有许多生成的图片类文件,那么想要访问正确,就要经常清除缓冲区。
温馨提示:答案为网友推荐,仅供参考