2

我正在尝试动态创建一个 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 处理程序也没有效果。

提前感谢您提供的任何建议或帮助!

4

0 回答 0