使用/ tmp目录中的文件

时间:2015-03-26 13:21:51

标签: php tmp

我正在尝试验证上传的.zip文件的内容,然后将其保存到所需的目录。

我的问题是:我可以重命名,提取tmp/目录中的文件吗?文件会自动删除吗?

我只想知道我自己在tmp/目录中创建的文件会发生什么。

目前的流程是:

  • tmp_name重命名为...['tmp_name'].zip (if not exists)
  • 删除...['tmp_name']文件。
  • 将zip解压缩到文件夹名称...['tmp_name'],文件已被删除。
  • 删除.zip文件
  • 验证文件夹内的内容。
  • 移动或删除解压缩的文件夹。

2 个答案:

答案 0 :(得分:2)

您可以阅读here

  

在大多数系统上,此目录在启动时或在本地系统关闭时清除。

但正如文档所述,在 Linux 级别上没有多少指定,它取决于分发。大多数服务器不会频繁重启,因此/tmp文件夹可能会变得混乱,使用一些(大量)磁盘空间。但是,大多数Linux系统允许设置TMPTIME变量:文件在/tmp中可以存活的天数。因此,通过将变量设置为早于一天的1个文件,将自动删除(尽管可能在一天之后不到一秒)。有关详细信息,请参阅this answer

简短回答:文件是文件系统的一部分。它们通常不会自动删除,只能在重启或足够老时删除。这样可以确保在必须对文件执行一些操作时,它们不会在文件中间消失。虽然其中一个当然不知道。

因此,您应确保为文件指定不同的名称:如果两个进程同时发生,则不应进行交互。例如,使用随机数,以便第一个文件名为zip151323.zip,第二个文件名为zip4745443233.zip

答案 1 :(得分:1)

这取决于您的操作系统和PHP配置。 PHP不管理文件系统,任何应用程序都可以添加此目录。

来自http://php.net/manual/en/ini.core.php#ini.upload-tmp-dir

  

upload_tmp_dir string用于存储文件的临时目录   在进行文件上传时。必须是PHP所用的任何用户都可写的   跑来跑去。如果未指定,PHP将使用系统的默认值。

     

如果此处指定的目录不可写,PHP将回退到   系统默认临时目录。如果打开open_basedir,那么   必须允许系统默认目录才能成功上传。

简而言之,它取决于您的操作系统和配置,因为这只是指向系统中某个文件夹的指针 - PHP不会为您管理这个。许多人只会在启动时删除这些文件,因此在解压缩后应该小心清理(或使用一些东西来清理任何垃圾)。

如果要创建一个库或模块以供一般重用,那么您需要在文档中指定您使用的临时文件夹的要求 - 当然,如果您将其用于快速处理之外的任何内容。 (即,你可能只是编写代码而忘记它,但如果你想保持安全......)。