LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1677|回复: 2

用php写的下载文件页面,为什么会出现给文件头部写入两个空格的问题?

[复制链接]
发表于 2007-7-26 17:12:42 | 显示全部楼层 |阅读模式
用php写的下载页面,通过<a href="download.php?name=<?echo $id;?>">下载</a>,下载出来的文件均不能执行。我用ue查看,发现文件大小多了2个字节?文件头部多出2个空格?16进制代码为20 20?不管从网上怎么扒别人的下载页面源代码,均出现这种问题。为什么会出现改写文件的情况?上传页面绝对没有问题,因为我通过ftp直接下载上传的软件均正常。可就是不能够套用这个下载页面。现在我发现了一个问题,我用ace压缩的文件,均不会被更改,可以正常使用,rar也不行,exe,chm等等均被添加,mp3也不会被添加。
我个人认为问题是不是出在Header头上?请高手帮助分析一下。谢谢!
另外需要说明,我的php配置upload选项上限制文件大小为10M。
具体下载页面源代码: (扒拉的网络上的,个人认为比较完善的)
<?
//启用下面的function
$file_dir=$_GET['url'];
$file_name=$_GET['name'];
files($file_dir,$file_name);
//自定义函数开始
function files($file_dir,$file_name)
{
$file_dir = chop($file_dir);//去掉路径中多余的空格
//得出要下载的文件的路径
if($file_dir != '')
{
$file_path = $file_dir;
if(substr($file_dir,strlen($file_dir)-1,strlen($file_dir)) != '/')
$file_path .= '/';
$file_path .= $file_name;
}
else
$file_path = $file_name;
//判断要下载的文件是否存在
if(!file_exists($file_path))
{
echo '对不起,你要下载的文件不存在。';
return false;
}
$file_size = filesize($file_path);
header("Content-type: application/octet-stream");
header("Accept-Ranges: bytes");
header("Accept-Length: $file_size");
header("Content-Disposition: attachment; filename=".$file_name);
$fp = fopen($file_path,"r");
$buffer_size = 10240;
$cur_pos = 0;
while(!feof($fp)&&$file_size-$cur_pos>$buffer_size)
{
$buffer = fread($fp,$buffer_size);
echo $buffer;
$cur_pos += $buffer_size;
}
$buffer = fread($fp,$file_size-$cur_pos);
echo $buffer;
fclose($fp);
return true;
}
?>
发表于 2007-7-26 22:02:45 | 显示全部楼层
换个编辑器吧,用用VIM
Linux下面是没有UE的
而且那玩意儿用着也不是很爽。
回复 支持 反对

使用道具 举报

发表于 2007-7-27 11:17:40 | 显示全部楼层
UTF-8编码的BOM头?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表