我多次陷入这种困境 - 我希望有一次能够在我脑海中调整答案。
使用PHP创建文件时,如* .zip,* pdf或任何其他文件,PHP将为您提供两个操作选项:
写入磁盘。
带标题的流直接下载。
需要考虑的事项是:
一个实际的例子:
假设我有一个网站下载带图片的打包拉链。
如果我流式传输拉链 - 显然会花费CPU(和时间)。
如果我写入磁盘 - 可能是安全问题(假设有人可以“抓取”网站,以某种方式找到zip文件夹或文件,并批量下载所有内容)
如果我写入磁盘,我还需要检查zip中的文件是否应该更新,而且我必须验证文件的完整性。
无论如何 - 我想听听人们有什么说法,哪种方式是首选方法,在哪种情况下,最佳做法是什么,或任何其他见解。
答案 0 :(得分:1)
如果要多次下载相同的zip文件,则将其缓存(在磁盘或其他一些持久存储上)是有意义的。如果你将zip的内容的哈希作为文件名的一部分(或者你在下面缓存数据的任何标识符),那么查看你的缓存值是否与你想要的服务相匹配是微不足道的。
如果任何给定的zip文件只下载一次,那么直接流式传输更有意义。
答案 1 :(得分:1)
如果你做得不错,安全无关紧要 。只是不要将文件存储在公共webroot中,或者将Web服务器配置为不直接提供这些文件。
除此之外,它取决于你想要什么。如果你需要一次又一次地提供相同的拉链,当然拉链一次并将其写入磁盘是有意义的,下次你将在那里服务它。这是一个简单的缓存策略 如果您需要确保拥有最新版本的zip,请以某种方式对内容进行哈希处理。例如:
(foo.txt, bar.jpg, baz.doc)
$hash = md5(foo.txt, bar.jpg, baz.doc)
$hash.zip
尚不存在,请创建$hash.zip
这是一种典型的缓存策略,可以避免一次又一次地进行昂贵的操作。