1

似乎我成功地创建了一个即时 zip 存档(filesize 和 file_exists 都返回预期值)但是当我尝试实际下载它时,我收到一个空的 ZIP 文件。奇怪的是,readfile 和 fread 都会出现这个错误。这是我的代码

$filename = $zip;
    $handle = fopen($filename, 'r');
    if ($handle === false)
    {
        die('Could not read file "' . $filename . '"');
    }

    header('Content-type: application/zip');
    header('Content-Disposition: attachment; filename="fsdownload.zip"');
    header('Cache-Control: private');
    while (!feof($handle))
    {
        echo fread($handle, 8192);
    }
    fclose($handle);

这适用于 < 10 MB 的 zip 文件。有什么想法可能是什么问题?

4

2 回答 2

1

为避免消耗过多内存,您可以使用ZipStreamPHPZip,它们将按块将压缩文件即时发送到浏览器,而不是在 PHP 中加载整个内容然后发送 zip 文件。

这两个库都是不错且有用的代码。一些细节:

  • ZipStream仅在内存中“工作”,但在必要时无法轻松移植到 PHP 4(使用hash_file()
  • PHPZip在磁盘上写入临时文件(占用的磁盘空间与要添加到 zip 中的最大文件一样多),但如果需要,可以轻松适应 PHP 4。

相关的SO问题:

于 2011-12-12T12:57:13.943 回答
0

问题是 PHP 限制。检查内存和执行时间限制。

于 2011-12-12T12:01:41.040 回答