- 论坛徽章:
- 0
|
用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]”,不知道是何解? |
|