我有一个 php 表单,其中有一堆复选框,所有这些复选框都包含指向文件的链接。一旦用户点击他们想要的复选框(文件),它就会压缩文件并强制下载。
我有一个简单的 php zip 强制下载工作,但是当其中一个文件很大或者如果有人说选择整个列表进行压缩和下载时,我的服务器就会出错。
我知道我可以增加服务器大小,但是还有其他方法吗?
我有一个 php 表单,其中有一堆复选框,所有这些复选框都包含指向文件的链接。一旦用户点击他们想要的复选框(文件),它就会压缩文件并强制下载。
我有一个简单的 php zip 强制下载工作,但是当其中一个文件很大或者如果有人说选择整个列表进行压缩和下载时,我的服务器就会出错。
我知道我可以增加服务器大小,但是还有其他方法吗?
如果你真的需要它来通过 PHP,最好的办法是使用流。对于流,内存要求非常低,并且不会随着内容的大小而增长。
是您的服务器内存不足还是不允许您将最终结果发送给客户端?如果它只是内存不足,请改为在文件系统上运行压缩。您可以在 PHP 中执行系统命令
system("...command...");
所以你可以根据用户的选择,将选中的文件聚合到一个临时目录(使用系统调用进行文件复制),然后压缩临时目录(使用系统调用调用pkzip),然后让PHP将临时文件发送到客户端,之后您的 PHP 脚本可以将其删除。
这样,压缩不会消耗 PHP 应用程序中的内存。
您可以在 web 服务器/php 级别打开 gzip 并跳过 PHP 脚本中的压缩。然后只需在两次调用之间输出正确的 zip 文件头即可readfile()
。
根据内容的动态程度以及您拥有的组合数量,您可以简单地为每个组合预先构建一个 zip 文件,然后将其返回给用户。不过,这可能会很快过时,因为有 5 个选项,您必须维护 32 个不同的档案。