使用文件系统中不存在的文件夹进行压缩


PHP Large Files Zipping with folders that don't exist in the file-system

我正在创建某种文件共享应用程序。在这个应用程序中,您应该能够提高-&下载文件并构建这些文件。

我选择不继续操作文件系统。但是我将文件上传到基于时间戳的文件夹中,并将重要信息存储在数据库中,并在DB中构建它们。所以没有真正的子文件夹,只有数据库中的关系将这些文件组织到文件夹中。

不我想让用户通过压缩来下载文件夹(包括子文件夹)。但是我想在将要下载的zip-archive中重新创建这个文件夹结构(用户在前端看到的)。我已经设法做到这一点,使用PHP的ZipArchive类:http://php.net/manual/en/class.ziparchive.php但这里有一个大问题。它使用大量内存& &;压缩大文件时CPU。系统必须能够处理大文件(>1GB)我不可能允许PHP使用>1GB的内存?!

现在我发现了一个Stackoverflow问题,在php中使用更少的内存压缩大文件:https://stackoverflow.com/a/4357904/383731

这似乎使用了Unix的Zip命令,但是是否有可能在这些Zip文件中创建文件夹,而不存在于文件系统中?

  • 在你的临时目录
  • 创建一个文件夹
  • 添加子文件夹和链接到真实文件
  • 闭嘴
  • 发送
  • 杀死临时文件

关于链接的部分很重要。如果您只是使用链接,则实际上不必复制文件内容。您所要做的就是给zip工具一个提示,它可以在哪里找到您想要包含在存档文件

中的内容。编辑:

符号链接和硬链接都可以,上面的链接解释了如何使用符号链接。