我正在尝试动态创建一个 zip 存档,以便从网站下载。这必须通过我们客户的最小努力来实现(例如,不安装特殊的解压实用程序)。事件的顺序是:
- 收集/创建了一堆文件。
- PHP (v2.2) 使用 shell_exec() 调用 linux zip (v2.31) 将文件归档到单个文件。
PHP 发送标头如下(通过 Apache v2.2.22):
Content-Type: application/zip Content-Length: (whatever) Content-Disposition: attachment; filename="whatever.zip" Content-Transfer-Encoding: binary
PHP 使用 readfile 将文件发送到浏览器。
收到的 zip 文件可以使用 Ubuntu 附带的 Archive Manager 实用程序轻松打开;但是,当使用 Firefox(最新版本)下载到 Windows 7 并作为普通压缩文件夹打开时,它会报告该文件无效。
原始 zip 文件与下载版本的比较表明,两个下载版本都有一个额外的 16 字节标头,如下所示:
2f3c 6f62 7964 0a3e 2f3c 7468 6c6d 0a3e
但在其他方面是相同的。
此标头绝对是导致 zip 文件在 Windows 上失败的原因:当原始文件通过网络共享传输时,Windows 能够毫无困难地打开它。
标题似乎没有添加到其他下载的文件(当然不是 PDF)。
我的第一个想法是 Apache 正在对流进行 gzip 编码,但甚至没有安装相关模块(并且接收到的标头没有提及任何压缩)。同样,为 .zip 扩展名添加显式 asis 处理程序也没有效果。
提前感谢您提供的任何建议或帮助!