59

我正在处理上传脚本。

如果用户上传了一个文件并且它已经存在,我想警告用户(这都是通过 ajax)并让他们选择替换它,或者取消它。

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

如果他们的用户说覆盖该 ajax 请求中的旧文件,则将路径传递回 php 继续处理该文件。

为此,我需要知道文件在 php 的 tmp 目录中保留多长时间

4

3 回答 3

71

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

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

于 2011-01-11T01:06:10.983 回答
23

对于上传的文件,手册指出

如果该文件未被移走或重命名,则该文件将在请求结束时从临时目录中删除。

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

更一般地说,正如您的问题标题可能暗示的那样,临时文件夹留给系统清理。在使用tempnamtmpfile之类的函数时,或者只是在写入临时目录时(参见sys_get_temp_dir),这是正确的。

在 Ubuntu 中,这是在每次系统重新启动时或按时间间隔完成的,如/etc/default/rcS.

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

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

于 2011-01-11T01:43:16.647 回答
-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/

于 2017-05-09T08:28:44.500 回答