您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

下载器代码可能有问题,导致PDF文件损坏

2025/4/21 13:55:17发布35次查看
服务器中的pdf文件是健康的:通过ftp直接下载来验证过。
下载器的部分代码如下:
$file_size = filesize($filedir);
header(content-type: application/octet-stream;charset=iso-8859-1);
header(cache-control: private);
header(accept-ranges: bytes);
header(accept-length: .$this->fjsize);
header(content-disposition: attachment; filename= . $this->delfilename);
$fp = fopen($filedir,r);
$buffer_size = 1024;
$cur_pos = 0;
while(!feof($fp) && $filedir-$cur_pos > $buffer_size)
{
$buffer = fread($fp,$buffer_size);
echo $buffer;
$cur_pos += $buffer_size;
}
if($file_size > 0)
$buffer = fread($fp,$file_size-$cur_pos);
else
$buffer = fread($fp,$this->fjsize);
echo $buffer;
fclose($fp);
flush();
回复讨论(解决方案) $fp = fopen($filedir,r b); //二进制方式打开,虽然 linux 不需要,但仍建议这么做
文本方式打开的文件,0x1a 就视为文件尾了
while(!feof($fp) && $filedir-$cur_pos > $buffer_size)
宜写作
while(!feof($fp))
feof($fp) 就是文件尾了
再 $filedir-$cur_pos > $buffer_size 已无必要
双重判断可能导致失误,比如 $filedir 不是 $buffer_size 整数倍时
另外,除文件内容外,不能输出任何其他内容,包括 bom 头
按照版主说的改了。照样出错。
ps:程序过去一年都运行良好,最近几天才出问题。
上传了一个文件,内容如下
1234567890
abcdefghijklmnopqrstuvwxyz
然后下载到本地,结果如下
?      2426153钒4噱jljnimk先淌紊退/(,*.)-+    &
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product