我有一个PHP表单,其中包含一堆复选框,所有复选框都包含文件链接。一旦用户单击他们想要的复选框(文件),它就会打包这些文件并强制下载。
我成功实现了一个简单的php zip强制下载,但当其中一个文件很大或者有人选择了整个列表进行压缩并下载时,我的服务器会出错。
我知道我可以增加服務器的大小,但是否還有其他方法?
我有一个PHP表单,其中包含一堆复选框,所有复选框都包含文件链接。一旦用户单击他们想要的复选框(文件),它就会打包这些文件并强制下载。
我成功实现了一个简单的php zip强制下载,但当其中一个文件很大或者有人选择了整个列表进行压缩并下载时,我的服务器会出错。
我知道我可以增加服務器的大小,但是否還有其他方法?
如果您真的需要通过PHP进行,最好的想法是使用流。使用流,内存需求非常低,并且不随内容大小而增长。
这个帖子可能会有帮助: LAMP:如何在飞行中为用户创建大文件的.zip,而无需磁盘/ CPU挤压
这是您的服务器内存不足还是不允许您将最终结果发送给客户端?如果只是内存不足,请在文件系统上运行压缩。您可以使用PHP执行系统命令。
system("...command...");
因此,根据用户的选择,您可以将所选文件聚合到临时目录中(使用系统调用进行文件复制),然后压缩临时目录(使用系统调用调用 pkzip),然后请求 PHP 向客户端发送临时文件,之后您的 PHP 脚本可以将其删除。
以这种方式,压缩不会消耗您的PHP应用程序的内存。
您可以在Web服务器/PHP级别上启用gzip,跳过PHP脚本中的压缩。然后,只需要在调用readfile()
之间输出适当的zip文件头即可。
根据内容的动态程度和组合数,您可以为每个组合预先构建一个zip文件,然后将其返回给用户。不过,这可能很快就会过时,因为对于5个选项,您必须维护32个不同的存档文件。