【发布时间】:2019-08-04 21:14:45
【问题描述】:
我正在使用 php ZipArchive 即时创建一个 zip 文件并将其发送回用户。我将压缩文件临时存储在文档根目录上方的文件夹中,然后将其与代码一起发送回
header('Content-type:application/zip');
header('Content-Disposition: inline; filename="'.("file.zip").'"');
header("Content-Transfer-Encoding: binary");
header("Content-Length:".filesize($file));
$fh = fopen($file,'rb');
fpassthru($fh);
在第一次发布后
$zip->close()
确保文件未打开。我遇到的问题是 - 存储的 zip 文件是一个有效的存档,我可以在 Windows 7、7Zip、WinZIP 等中打开它。但是,当我使用上面的代码发送文件时,它最终会得到一个 0xD 0xA 对在文件的开头,这足以使其损坏。我无法弄清楚这些角色可能来自哪里。这是 fopen/fpassthru 的已知错误吗?任何帮助将不胜感激。
【问题讨论】:
-
提示:有
readfile可以直接输出文件... -
最后添加
fclose($fh); exit();有帮助吗? -
另外,你确定没有其他输出吗? PHP文件本身的BOM?有空格吗?
-
你非常接近 Deceze - 请参阅下面的评论。如果您回答而不是发表评论,我可能会很好地接受答案。我不会想到在所需脚本中终止 ?> 后的额外行会导致这么多麻烦。