看来我已经成功创建了一个实时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文件,此方法工作正常。 对问题可能有什么想法?

===============>>#1 票数:1 已采纳

为了避免占用过多内存,您可以使用ZipStreamPHPZip ,它们会将即时打包的压缩文件按块发送给浏览器,而不是将全部内容加载到PHP中然后再发送zip文件。

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

  • ZipStream仅在内存中“起作用”,但在必要时不能轻易移植到PHP 4(使用hash_file()
  • PHPZip在磁盘上写入临时文件(占用的磁盘空间与要在zip中添加的最大文件一样大的磁盘空间),但如有必要,可以轻松地将其适配PHP 4。

相关的SO问题:

===============>>#2 票数:0

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

  ask by hauptbenutzer translate from so

未解决问题?本站智能推荐:

1回复

下载php时将文件添加到包含内容的zip文件中

我想将.txt文件添加到包含图片的zip文件中。 下载zip时,我想添加文件.txt而不影响原始文件。 因此,可以这样做吗? 还是唯一的方法是将zip文件解压缩到一个临时文件夹,然后添加txt文件并删除它? 我尝试使用tmpfile ,但是它只是创建一个临时文件
1回复

PHP即时将xml刷新为zipfile并推送下载

我根据数据库中的信息(xmltv格式)创建一个xml文件。 这些xml文件可能很大-25-70mb是正常的。 现在,我像这样动态创建xml文件: 然后刷新循环以防止内存溢出。 我还设置标题以将内容推送为下载: 由于大小,我希望能够zip / gzip xml。 这可能是即
1回复

在PHP中创建大型zip存档

在当前的PHP项目中,我需要将一堆PDF文件打包成某种存档,以便用户可以将它们全部下载在一起。 因为zip是最常见的,甚至是最基本的非IT Windows人士都知道它,所以我打算准备一个zip存档。 我的代码如下所示 如果服务器有足够的内存,此脚本可以正常工作。 不幸的是,我们
2回复

PHP使用密码快速创建Zip

尝试动态制作带有密码的Zip文件 现在一切正常(将文件从其他服务器下载到内存,将其压缩并发送给用户)。 如何在zip上设置密码? (不能使用exec()shell_exec())它必须在代码中的什么位置? 谢谢。
2回复

laravel5.3动态生成下载(.txt)

动态生成下载(在我的.txt文件中)的最佳方法是什么? 我的意思是不将文件存储在服务器之前。 为了理解这里我需要完成的工作:
1回复

PHP即时创建并下载ZIP

我正在创建一个包含几个脚本的ZIP文件(例如: test.php , functions.js和style.css )。 脚本运行良好,唯一的问题是ZIP文件被放置在我的Web服务器上。 有办法防止这种情况吗? 我已经阅读了多个类似的问题: 这个问题似乎有效,但是我不知道该如何使用。
2回复

提供zip以便在php中下载

花了四个小时没有结果,我真的很生气。 我想提供一个zip文件供下载。 不是通过链接而是使用readfile(也许还有另一种方法?)不管我尝试了什么,下载后zip都是空的。 谁能帮我吗?
1回复

Zip文件未在PHP中下载

我已经实现了创建文件的Zip文件夹(从db路径)并下载PHP中的压缩文件夹的代码。 我正在使用Ubuntu OS。 Zip创建代码可以正常工作,并且在那里可以创建zip文件,但问题是文件的所有者是www-data ,文件许可权是Read-Only 。 当我尝试对该压缩文件夹设置c
7回复

PHP ZIP文件下载

这是一个从imap服务器下载附件文件的代码。 几乎所有文件类型(pdf,doc,xls等)都正确下载,而某些zip文件会出现以下错误: “存档格式未知或已损坏” 码: 此外,如果我回显数据并使用以下方法将其转换为文件: http://www.motobit.com/u
1回复

用PHP下载Zip文件

我的wesite具有用户登录功能。 用户是参加我的培训机构的培训课程的用户。 现在,训练课程以数字命名,例如2655、2755等。现在,我有一些特定的文件或会话工具包,您可以说可以从用户的登录名中下载,但只有他才能下载文件他的会议。 现在我有zip文件。 所以我在php name $se