PHP 动态 ZIP 下载为空白

发布于 2024-12-20 16:14:48 字数 599 浏览 3 评论 0原文

看来我成功创建了一个动态 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 文件 < 10MB。对可能出现的问题有什么想法吗?

It seems I successfully create an on-the-fly zip archive (filesize and file_exists both return the expected values) but when I attempt to actually download it, I receive an empty ZIP file.
Curiously enough this error occurs with both readfile and fread. This is my code

$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);

This works fine for zip-Files < 10 MB. Any thoughts on what the problem might be?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

新人笑 2024-12-27 16:14:49

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

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

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

相关SO问题:

To avoid consuming too much memory, you can use ZipStream or PHPZip, which will send zipped files on the fly to the browser, divided in chunks, instead of loading the entire content in PHP and then sending the zip file.

Both libraries are nice and useful pieces of code. A few details:

  • ZipStream "works" only with memory, but cannot be easily ported to PHP 4 if necessary (uses hash_file())
  • PHPZip writes temporary files on disk (consumes as much disk space as the biggest file to add in the zip), but can be easily adapted for PHP 4 if necessary.

Related SO questions:

一绘本一梦想 2024-12-27 16:14:49

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

The problem is a PHP limit. Check for memory and execution time limits.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文