【问题标题】:Size limit on PHP's zipArchive class?PHP 的 zipArchive 类的大小限制?
【发布时间】:2010-08-12 22:53:28
【问题描述】:

我正在用 PHP 创建一个 zip 文件供用户下载。我没有从 PHP 或检查 zipArchive 类的 GetStatusString 函数中得到任何错误。但是,如果我将一些文件放入存档中,然后当我尝试打开它时,我会收到错误“压缩(压缩)文件夹无效或损坏”。我检查了我要添加的所有文件,它们都很好。我唯一能想到的是较大的文件会导致问题。但是“大”文件只有大约半兆字节,我找不到任何关于 zipArchive 文件大小限制的文档。关于其他尝试的任何想法,所以我可以追踪这个问题?谢谢。

编辑: 我已将其范围缩小到一个导致问题的特定文件。还有其他的工作一样大或更大,所以我想扔掉那个想法。以下是运行良好的文件名示例:

627 简.CCD.pdf
712 Example_DrNotes.pdf
625 简.Labs2.pdf

是的,文件名中有空格...继承代码问题。这是不起作用的文件名:

623 简.Labs.pdf

似乎不是文件名问题。这最终将通过网络进行,但我正在检查它在服务器上生成的实际 zi​​p 文件,这就是我得到错误的地方。

代码如下:

$zip = new ZipArchive();
$zfileName = $GLOBALS["localUploadRoot"] . $zfile;
$requests = $this->getRequests(true);
foreach ($requests AS $r) {
    if (file_exists($GLOBALS["localInboundRequests"] . $r["file"])) {
        $zip->addFile($GLOBALS["localInboundRequests"] . $r["file"], $r["file"]);
    }
}
$zip->close();

编辑 2: 抱歉,我无法发布文件。里面有个人信息。

【问题讨论】:

  • 也许您应该在构建 zip 文件的位置发布代码的相关部分。当然 500K 文件不会造成问题。
  • 创建过程真的完成了吗?你能显示一些你正在添加的文件的代码和示例文件名吗?他们的名字没有特殊字符吗?
  • CLI 还是网页?您是先将它们保存到磁盘还是直接将它们“流式传输”到客户端。 (如果是后者,请确保您没有进行任何 zlib 压缩。)
  • 你能把那个文件放在某个地方,让我们看看能不能压缩它吗?

标签: php zip ziparchive


【解决方案1】:

除非您使用 zip64,否则 Zip 文件中的文件限制为 4 GB(未压缩文件大小),php 尚不支持该文件。 见http://bugs.php.net/bug.php?id=51353

【讨论】:

    【解决方案2】:

    zip 文件的限制为 4GB(压缩文件)。如果压缩文件大小大于 4GB,则无法解压缩。因此,将 zip 文件拆分为 4GB 的更好方法。

    【讨论】:

    • 老兄,你刚刚救了我的命!
    【解决方案3】:

    由于 zip 文件的自然文件大小限制为 4GB(正确的约为 3,6GB),此类将生成大于 4 GB 的损坏文件。使用 tar.gz 是一个合适的选择。

    【讨论】:

      猜你喜欢
      • 2011-10-14
      • 2011-12-29
      • 1970-01-01
      • 1970-01-01
      • 2016-07-17
      • 1970-01-01
      • 2011-11-21
      • 2013-06-10
      • 2011-08-31
      相关资源
      最近更新 更多