gpt4 book ai didi

php - 使用 PHP 创建和下载 zip 文件时应如何保存临时文件?

转载 作者:太空宇宙 更新时间:2023-11-04 10:48:20 25 4
gpt4 key购买 nike

我想在服务器上压缩一个目录并将其下载给用户。我在此站点上找到了有关如何压缩目录的重要信息。

让我难过的部分是存储临时文件的位置。据我所知,zipArchive 要求将 zip 文件保存在服务器上,如果不保存我就无法下载。正确吗?

我见过他们建议将其保存为“somename.zip”的解决方案,然后使用 readfile() 以及要下载的适当 header ,然后使用 unlink() 下载后去掉它。但是将“somename.zip”存储在哪里以及如果发生冲突怎么办?

所以,我开始考虑在某个临时目录中创建一个随机名称的文件。或者也许我应该使用类似 tmpfile() 的东西,但它会返回一个文件处理程序,我不知道它如何与 zipArchive 一起工作。

对于我的应用程序,目录的大小相当小,甚至不想将其写入磁盘,而是写入内存。可能类似于 $tmp_handle = fopen('php://temp', 'r+');,但这同样会返回一个文件处理程序,我不知道它如何与 zipArchive 一起工作。

zipArchive创建的zip文件应该如何临时保存?

最佳答案

由于 ZipArchive 类使用堆栈流,$filename 参数不能是 php://tempphp://memory。它必须是文件系统上的“真实”文件路径。

一些思路:

  • 如评论所述,tempnam() 函数可以帮助您避免临时文件名冲突。我认为临时存储文件并readfile()'ing 它是最常见且不错的选择

  • 如果您确实希望将临时文件存储在内存中,您可以在 Linux 系统上挂载一个 tmpfs 目录。它将被视为 PHP 的“正常”目录,但将存储在 RAM 中

  • 如果您可以使用 shell_exec() 函数,您可以在命令行中压缩目录并在 PHP 中读取输出:它将存储在内存中。

在我看来,第一个选项(您的第一个想法)在大多数情况下更好,因为:

  • 允许使用 shell_exec() 可能很危险

  • 如果有一天你有大文件要压缩,这可能会填满内存,导致性能非常差

关于php - 使用 PHP 创建和下载 zip 文件时应如何保存临时文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32124045/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com