使用PHP创建和下载zip文件时临时文件应该如何保存?
How should the temporary file be saved when creating and download zip file using PHP?
我想在服务器上压缩一个目录并下载给用户。我在此站点上找到了有关如何压缩目录的重要信息。
让我难过的部分是存储临时文件的位置。据我所知,zipArchive
要求将 zip 文件保存在服务器上,不保存就无法下载。正确吗?
我见过一些解决方案,他们建议将其保存为 "somename.zip",然后使用 readfile()
以及适当的 headers 下载,然后使用 unlink()
下载后摆脱它。但是存储在哪里"somename.zip",如果有冲突怎么办?
所以,我开始考虑在某个临时目录中创建一个随机名称的文件。或者也许我应该使用 tmpfile()
之类的东西,但是 returns 是一个文件处理程序,我不知道它如何与 zipArchive 一起使用。
对于我的应用程序,目录的大小相当小,甚至不想将其写入磁盘,而是写入内存。可能类似于 $tmp_handle = fopen('php://temp', 'r+');
,但是这个 returns 是一个文件处理程序,我不知道它如何与 zipArchive 一起工作。
zipArchive创建的zip文件应该如何临时保存?
由于 ZipArchive class 使用堆栈流,$filename
参数不能是 php://temp
或 php://memory
。它必须是文件系统上的 'real' 文件路径。
一些思路:
如评论所述,tempnam()
函数可以帮助您避免临时文件名冲突。我认为临时存储文件并 readfile()
'ing 它是最常见且不错的选择
如果您确实希望将临时文件存储在内存中,您可以在 Linux 系统上安装一个 tmpfs
目录。它将被视为 PHP 的 'normal' 目录,但将存储在 RAM
中
如果你可以使用shell_exec()
功能,你可以在命令行中压缩目录并读取PHP中的输出:它将存储在内存中。
在我看来,第一个选项(您的第一个想法)在大多数情况下更好,因为:
允许使用 shell_exec()
可能很危险
如果有一天你有大文件要压缩,这可能会填满内存,导致性能非常差
我想在服务器上压缩一个目录并下载给用户。我在此站点上找到了有关如何压缩目录的重要信息。
让我难过的部分是存储临时文件的位置。据我所知,zipArchive
要求将 zip 文件保存在服务器上,不保存就无法下载。正确吗?
我见过一些解决方案,他们建议将其保存为 "somename.zip",然后使用 readfile()
以及适当的 headers 下载,然后使用 unlink()
下载后摆脱它。但是存储在哪里"somename.zip",如果有冲突怎么办?
所以,我开始考虑在某个临时目录中创建一个随机名称的文件。或者也许我应该使用 tmpfile()
之类的东西,但是 returns 是一个文件处理程序,我不知道它如何与 zipArchive 一起使用。
对于我的应用程序,目录的大小相当小,甚至不想将其写入磁盘,而是写入内存。可能类似于 $tmp_handle = fopen('php://temp', 'r+');
,但是这个 returns 是一个文件处理程序,我不知道它如何与 zipArchive 一起工作。
zipArchive创建的zip文件应该如何临时保存?
由于 ZipArchive class 使用堆栈流,$filename
参数不能是 php://temp
或 php://memory
。它必须是文件系统上的 'real' 文件路径。
一些思路:
如评论所述,
tempnam()
函数可以帮助您避免临时文件名冲突。我认为临时存储文件并readfile()
'ing 它是最常见且不错的选择如果您确实希望将临时文件存储在内存中,您可以在 Linux 系统上安装一个
tmpfs
目录。它将被视为 PHP 的 'normal' 目录,但将存储在 RAM 中
如果你可以使用
shell_exec()
功能,你可以在命令行中压缩目录并读取PHP中的输出:它将存储在内存中。
在我看来,第一个选项(您的第一个想法)在大多数情况下更好,因为:
允许使用
shell_exec()
可能很危险如果有一天你有大文件要压缩,这可能会填满内存,导致性能非常差