使用php压缩大文件

使用php压缩大文件,php,zip,large-files,Php,Zip,Large Files,我有一个php表单,它有一堆复选框,所有复选框都包含指向文件的链接。一旦用户点击他们想要的复选框(文件),它就会将文件拉上拉链并强制下载 我得到了一个简单的php压缩力下载工作,但当其中一个文件很大,或者如果有人选择整个列表进行压缩和下载,我的服务器就会出错 我知道我可以增加服务器的大小,但还有其他方法吗?根据内容的动态性以及您有多少组合,您只需为每个组合预先构建一个zip文件,然后将其返回给用户即可。这可能很快就会过时,因为有5个选项,您必须维护32个不同的存档。是您的服务器内存不足还是不允许

我有一个php表单,它有一堆复选框,所有复选框都包含指向文件的链接。一旦用户点击他们想要的复选框(文件),它就会将文件拉上拉链并强制下载

我得到了一个简单的php压缩力下载工作,但当其中一个文件很大,或者如果有人选择整个列表进行压缩和下载,我的服务器就会出错


我知道我可以增加服务器的大小,但还有其他方法吗?

根据内容的动态性以及您有多少组合,您只需为每个组合预先构建一个zip文件,然后将其返回给用户即可。这可能很快就会过时,因为有5个选项,您必须维护32个不同的存档。

是您的服务器内存不足还是不允许您将最终结果发送到客户端?如果只是内存不足,请在文件系统上运行压缩。您可以使用PHP执行系统命令

system("...command...");
因此,您可以根据用户选择,将所选文件聚合到临时目录中(使用系统调用进行文件复制),然后压缩临时目录(使用系统调用调用pkzip),然后要求PHP将临时文件发送到客户端,然后PHP脚本可以删除它


这样,压缩不会消耗PHP应用程序中的内存。

您可以在web服务器/PHP级别打开gzip,并跳过PHP脚本中的压缩。然后,在调用
readfile()

之间输出正确的zip文件头就成了一个问题。如果您真的需要它来通过PHP,最好的方法是使用streams。对于流,内存需求非常低,并且不会随着内容的大小而增长。

此线程可能会有所帮助

嘿,谢谢,所以我确实想到了这一点,但它不会起作用。还有其他想法吗?你也从来没有提到你是否达到了最大执行时间,或者耗尽了内存限制。如果你已经精疲力竭了,那么从system()调用运行pkzip仍然需要时间。哇!谢谢,我有点困惑。通过上面所说的,用一个简单的复选框文件zip来实现这个功能需要多少钱?这些文件会经常更改吗?它们有多大?虽然这些关于流的陈述对于它们的用例是正确的,但流不能完全解决这个问题。当PHP需要在脚本执行过程中处理stream-y数据时,它们很有用,但就整体服务器行为而言,最终还是会在Apache的内存中一次性抛出大量数据。