首页 文章

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

提问于
浏览
47

我正在处理上传脚本 .

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

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

如果他们的用户说覆盖旧文件,那么ajax请求将路径传递给php继续处理该文件 .

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

3 回答

  • -1

    对于上传的文件,the manual states

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

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

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

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

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

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

  • 62

    在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/

  • 20

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

    根据php.net:"The file will be deleted from the temporary directory at the end of the request if it has not been moved away or renamed."

相关问题