我正在处理上传脚本。
如果用户上传了一个文件并且它已经存在,我想警告用户(这都是通过 ajax)并让他们选择替换它,或者取消它。
我很好奇我是否可以将文件留在 tmp 中并在 ajax 响应中传回该文件的路径,而不是移动文件。
如果他们的用户说覆盖该 ajax 请求中的旧文件,则将路径传递回 php 继续处理该文件。
为此,我需要知道文件在 php 的 tmp 目录中保留多长时间
通过 POST 上传的文件在 php 脚本完成执行后立即被删除。
根据php.net:“如果该文件没有被移走或重命名,则该文件将在请求结束时从临时目录中删除。”
对于上传的文件,手册指出:
如果该文件未被移走或重命名,则该文件将在请求结束时从临时目录中删除。
因此,应将要保留的文件移动到另一个位置。
更一般地说,正如您的问题标题可能暗示的那样,临时文件夹留给系统清理。在使用tempnam或tmpfile之类的函数时,或者只是在写入临时目录时(参见sys_get_temp_dir),这是正确的。
在 Ubuntu 中,这是在每次系统重新启动时或按时间间隔完成的,如/etc/default/rcS
.
在一些基于 Red Hat 的发行版中,它是使用tmpwatch
cronjob 中的实用程序完成的。在其他情况下,/tmp
分区使用tmpfs
文件系统安装,类似于 RAM 磁盘(因此在计算机关闭时被清理)。
另一种已知的机制是大小阈值,这意味着当临时目录达到一定大小时,将从旧文件中清除临时目录。
需要在 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/