使用 php 压缩大文件 [关闭]
Posted
技术标签:
【中文标题】使用 php 压缩大文件 [关闭]【英文标题】:Use php to zip large files [closed] 【发布时间】:2010-10-07 20:10:39 【问题描述】:我有一个 php 表单,其中包含一堆复选框,这些复选框都包含指向文件的链接。一旦用户点击他们想要的复选框(文件),它就会压缩文件并强制下载。
我有一个简单的 php zip force 下载可以工作,但是当其中一个文件很大或者有人说选择整个列表进行压缩和下载时,我的服务器就会出错。
我知道我可以增加服务器大小,但是还有其他方法吗?
【问题讨论】:
这些文件会经常更改吗?它们有多大? 【参考方案1】:如果你真的需要它来通过 PHP,最好的办法是使用流。对于流,内存要求非常低,并且不会随着内容的大小而增长。
【讨论】:
虽然这些关于 Streams 的陈述适用于它们的用例,但 Streams 不能完全解决这个问题。它们在 PHP 需要在脚本执行过程中处理流式数据的情况下很有用,但就整体服务器行为而言,您最终仍将一次性在 Apache 的内存中投入大量数据。 【参考方案2】:这个帖子可能对LAMP: How to create .Zip of large files for the user on the fly, without disk/CPU thrashing有帮助
【讨论】:
【参考方案3】:是您的服务器内存不足还是不允许您将最终结果发送给客户端?如果它只是内存不足,请改为在文件系统上运行压缩。你可以在 PHP 中执行系统命令
system("...command...");
所以你可以根据用户的选择,将选中的文件聚合到一个临时目录中(使用系统调用进行文件复制),然后压缩临时目录(使用系统调用调用pkzip),然后要求 PHP 将临时文件发送到客户端,之后您的 PHP 脚本可以将其删除。
这样,压缩不会消耗您的 PHP 应用程序的内存。
【讨论】:
哇!谢谢,我有点困惑。通过您上面所说的所有内容,您使用简单的复选框文件 zip 完成这项工作需要多少钱?【参考方案4】:您可以在 web 服务器/php 级别打开 gzip 并跳过 PHP 脚本中的压缩。然后,只需在调用 readfile()
之间输出正确的 zip 文件头即可。
【讨论】:
【参考方案5】:根据内容的动态程度以及您拥有的组合数量,您可以简单地为每个组合预先构建一个 zip 文件,然后将其返回给用户。不过,这可能会很快过时,因为有 5 个选项,您必须维护 32 个不同的存档。
【讨论】:
嘿,谢谢,所以我真的想到了这一点,但它不起作用。还有其他想法吗? 您也从未提及您是否达到了 max_execution_time 或耗尽了 memory_limit。如果您正在耗尽 m_e_t,则从 system() 调用运行 pkzip 仍然需要时间。以上是关于使用 php 压缩大文件 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章