PHP即时ZIP下载为空白

时间:2011-12-12 11:58:18

标签: php download zip on-the-fly

我似乎成功创建了一个即时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);

这适用于zip-Files< 10 MB对问题可能是什么的任何想法?

2 个答案:

答案 0 :(得分:1)

为了避免消耗太多内存,您可以使用ZipStreamPHPZip,它会动态地将压缩文件发送到浏览器,分成块,而不是用PHP加载整个内容然后发送zip文件。

这两个库都是很好且有用的代码片段。一些细节:

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

相关的SO问题:

答案 1 :(得分:0)

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