其实,这不能算一个标准的错误,但是,这个错误让我弄了一下午也没有弄出来,问题是这样的:当我在php的页面设置下载的代码完成之后,总的看,代码并没有任何问题,但是,当我在实际下载的时候,单独把文件打开,则数据错误,在这个问题出现之后,我看了一下图片文件的代码和文件大小,发现比实际文件大了一些,对比代码,发现有些许不同,要说修改那就根本不能,所以,我就在代码里面继续找问题,这样找了一下午,也没有找到什么问题,这样就很纠结了,经过一下午的痛苦折磨,我顿时顿悟一个问题:我的字符编码是什么!对,是utf-8的编码,这个编码在一般的网页代码编写几乎是万能的,但是,文件(例如图片,视屏等)还是utf-8编码吗?于是,我把utf-8转化成ANSI的编码格式,再次进行测试。。。终于成功了,数据正确而且完整。
下面是我的测试过程的具体代码(注:没有上传02.jpg图片):
<?php
$file_name = "02.jpg";
if(!file_exists($file_name)){
echo "没有此文件";
return ;
}
$fp = fopen($file_name,"r");
//文件大小
$file_size = filesize($file_name);
//定义相应头,说明是一个文件
header("Content-type: application/octet-stream");
//要以字节的方式返回
header("Accept-Ranges: bytes");
//限制文件的大小,就是该文件的实际大小,绝对的不多不少
header("Accept-Length: $file_size");
//定义在浏览器的下载时显示的文件名称
header("Content-Disposition: attachment; filename=".$file_name);
$buffer = 1024;
$file_count = 0;
while(!feof($fp) && ($file_size-$file_count>0)){
$file_data = fread($fp,$buffer);
$file_count+=$buffer;
echo $file_data;
}
fclose($fp);
?>