Chinaunix

标题: 文件下载求助! [打印本页]

作者: s-jackie    时间: 2006-09-29 13:59
标题: 文件下载求助!
用PHP下载一个文件,因为不能暴露下载的实际目录,所以用fread的方法打开,然后发送给客户端。可执行文件包含一个数字签名,发现用这种方法发送的后的文件在保存到本机后末尾多了一个回车换行符,导致签名失效,无法在下载进度结束后直接运行!
发送代码:
header("Content-type: application/octet-stream");
header("Accept-Ranges: bytes");
header("Accept-Length: {$size}");
header("Content-Disposition: attachment; filename="$name");

$fp = fopen($downpath, "rb");
fpassthru($fp);
fclose($fp);

换成:
$fp = fopen($downpath,"rb");
$buffer_size = 1024;
$cur_pos = 0;
   
while(!feof($fp)&&$size-$cur_pos>$buffer_size)
{
    $buffer = fread($fp,$buffer_size);
    print($buffer);
    $cur_pos += $buffer_size;
}
   
$buffer = fread($fp, $size-$cur_pos);
print($buffer);
fclose($fp);
效果一样。

但是用header("Location: $downpath");直接给出地址可以。
可公司要求不能这样给出地址,请教高手如何能去掉这个回车换行符!另外用上面的方式给出文件名时,会在里面加上一个“[1]”,不知道是何解?
作者: saccount    时间: 2006-09-29 16:30
http://www.ugia.cn/?p=109
作者: s-jackie    时间: 2006-09-29 17:09
谢谢楼上的兄弟!
作者: lwbbs    时间: 2006-09-30 03:11
原帖由 saccount 于 2006-9-29 16:30 发表
http://www.ugia.cn/?p=109

不错. 跟PEAR的HTTP_Download相似.
但是 PEAR的东西牵扯的东西太多. 这个却只有一个函数
简单多了.




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2