php :: tmp文件停留多长时间?

时间:2011-01-11 01:03:50

标签: php temp tmp

我正在处理上传脚本。

如果用户上传文件并且它已经存在,我想警告用户(这是通过ajax完成的)并给他们替换它的选项,或取消。

而不是移动文件, 我很好奇我是否可以将文件保留在tmp中并在ajax响应中传回该文件的路径。

如果用户说覆盖了旧文件,那么ajax请求会将路径传回给php继续处理该文件。

为了实现这一点,我需要知道文件在php的tmp目录中停留多长时间

3 个答案:

答案 0 :(得分:63)

通过POST上传的文件在php脚本完成执行后立即被删除。

根据php.net: “如果文件尚未移走或重命名,该文件将在请求结束时从临时目录中删除。”

答案 1 :(得分:20)

对于上传的文件,the manual states

  

该文件将从中删除   临时目录在末尾   要求,如果它没有被移走   或重命名。

因此,要保留的文件应移至另一个位置。

更一般地说,正如您的问题标题可能暗示的那样,系统会清除临时文件夹。在使用tempnamtmpfile等函数时,或者只是在写入临时目录时(参见sys_get_temp_dir),都是如此。

在Ubuntu中,这是在每次系统重启时或按/etc/default/rcS中定义的时间间隔完成的。

在一些基于Red Hat的发行版中,它是使用cronjob中的tmpwatch实用程序完成的。在其他情况下,使用/tmp文件系统挂载tmpfs分区,该文件系统类似于RAM磁盘(因此在计算机关闭时进行清理)。

另一种已知的机制是大小阈值,这意味着临时目录在达到一定大小时将从旧文件中清除。

答案 2 :(得分:-2)

需要在PHP中设置三个变量,以确保/ tmp目录的垃圾收集正确发生且它们是:

session.gc_maxlifetime = 21600
session.gc_probability = 1
session.gc_divisor = 100

将session.gc_maxlifetime设置为您希望每个tmp文件在删除之前持续的秒数。如果您在OpenCart中登录管理员,这是您自动注销之前的秒数。例如,要设置半小时,您将执行60秒30分钟,这将是1800秒的值。

其他两个变量与垃圾收集器何时运行有关,如果遇到问题,将它们设置为上述值非常重要。

更多信息: https://www.antropy.co.uk/blog/opencart-php-session-tmp-files-filling-up/