php编写的下载文件的 代码 自己测试时 下载下来 打不开,提示该图片已损坏

<body><?php$file_name="美丽.jpg";//php函数比较古老,所以要是有中文名的文件则必须转码,如下将utf-8转换为gb2312。才能读出文件$... <body>
<?php
$file_name="美丽.jpg";
//php函数比较古老,所以要是有中文名的文件则必须转码,如下 将utf-8转换为gb2312。才能读出文件
$file_name=iconv("utf-8","gb2312",$file_name);
//绝对路径
$file_path=$_SERVER['DOCUMENT_ROOT']."/download/".$file_name;
// 相对路径用这个代码 注意那个 第一个分号后的小 . 与绝对路径比较 $file_path="./download/".$file_name;
//打开文件
if(!file_exists($file_path)){
echo "您要下载的文件不存在!";
return ;

}

$fp=fopen($file_path,"r");
//获取文件大小
$file_size=filesize($file_path);
//返回的文件
header("Content-type: application/octet-stream");
//按照字节大小返回
header("Accept-Ranges:bytes");
//这里是客户端的弹出对话框,对应的文件名
header("Content-Disposition:attachment;filename=".$file_name);
// $buffer 每次读取多少个字节
$buffer=1024;
//为了安全下载,我们最好做一个文件字节读取计数器
$file_count=0;
//判断文件是否结束
while(!feof($fp)||($file_size-$file_count)>0){
$file_date=fread($fp,$buffer);
$file_count+=$buffer;
//把部分数据回送给浏览器
echo $file_date;
}
fclose($fp);

?>
</body>
展开
 我来答
匿名用户
2015-08-01
展开全部
把头尾的body去掉!把最后的?>也去掉
追问
还是不行  一样的图片已损坏
追答
你是先读取出图片内容, 再输出图片内容从而达到下载的目的!
那么, 你自己分析一下嘛, 图片, 是不可以包含有空格、换行、html标签等内容的, 对吗?
那你输出了、空格等, 不就是给图片内容增加了本不该图片有的东西, 也就是损坏了图片吗?

例外, 你这个文件只是下载图片文件, 并没有其他作用, 那么, 文件编码完全可以使用gb2312, 如果是运行在window操作系统的话, 省的去转码!
转码的原因, 并不是因为你上面提到的什么php函数太老什么的!
而是, 看操作系统!
微软的win操作系统, 文件和目录的编码本身就是gb2312, 如你的php文件, 是utf-8编码, 而且文件或者目录路径以及名称存在中文, 那么你必须转码!
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式