我正在处理上传脚本。
如果用户上传文件并且它已经存在,我想警告用户(这是通过ajax完成的)并给他们替换它的选项,或取消。
而不是移动文件, 我很好奇我是否可以将文件保留在tmp中并在ajax响应中传回该文件的路径。
如果用户说覆盖了旧文件,那么ajax请求会将路径传回给php继续处理该文件。
为了实现这一点,我需要知道文件在php的tmp目录中停留多长时间
答案 0 :(得分:63)
通过POST上传的文件在php脚本完成执行后立即被删除。
根据php.net: “如果文件尚未移走或重命名,该文件将在请求结束时从临时目录中删除。”
答案 1 :(得分:20)
对于上传的文件,the manual states:
该文件将从中删除 临时目录在末尾 要求,如果它没有被移走 或重命名。
因此,要保留的文件应移至另一个位置。
更一般地说,正如您的问题标题可能暗示的那样,系统会清除临时文件夹。在使用tempnam或tmpfile等函数时,或者只是在写入临时目录时(参见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/