**已关闭。**此问题需要debugging details。它目前不接受回答。
编辑问题以包括desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将帮助其他人回答这个问题。
7小时前关闭
Improve this question
我提供了一种下载多张照片作为一个单一的存档文件的方法。
TAR格式工作正常,但大多数人没有任何东西可以打开TAR文件在他们的设备上,然后抱怨它不工作。
ZIP格式是不必要的(因为照片已经压缩),但大多数人都可以打开。
内置的PHP类ZipArchive
似乎只有一个方法addFile
来一次添加一个文件。这似乎涉及到整个存档的解压缩和重新压缩,其效果是您添加的文件越多,它就越慢-即。它在O(n2)时间内运行以添加n个文件。超过30-40张高分辨率照片的影响就变得灾难性了。
我是不是错过了什么ZipArchive
?或者这是类中的一个缺点,应该作为特性请求提出来?
是否有其他方法可以实现快速生成存档格式的目标,使大多数人能够在不安装其他软件的情况下打开存档格式?
2条答案
按热度按时间yqkkidmi1#
如果是这样的话,这将是一个相当有缺陷的设计,但你永远不知道,所以让我们测试一下。
首先,让我们准备一些50 MB的文件,以便在其余的基准测试中使用:
现在,让我们创建一些ZIP压缩文件,增加文件数量:
在我当前的计算机(Windows 10桌面,PHP/8.1.15 64位)中:
所以......这当然不是一个科学的基准,只是一个快速的测试,以弄清楚整体情况。结论是,它看起来是线性的,并且每次都不会压缩和解压缩整个存档。实际上,大的延迟发生在
$zip->close()
之间。然后我运行了一些完全禁用压缩的测试:
实际上更快:
最后但并非最不重要的是,在我的第一次测试中,我没有过多考虑就使用了
->addFromString()
,我发现随着我添加更多文件,RAM的使用率一直在增加。结论:
yqlxgs2m2#
关于ZipArchive::addFile手册中的注解,看起来该文件实际上并没有添加到函数调用中。文件将在zip对象关闭时添加。