我正在处理上传脚本 .
如果用户上传文件并且它已经存在,我想警告用户(这完全是通过ajax)并给他们替换它的选项,或取消 .
我没有移动文件,而是好奇我是否可以将文件保留在tmp中并在ajax响应中传回该文件的路径 .
如果他们的用户说覆盖旧文件,那么ajax请求将路径传递给php继续处理该文件 .
为了实现这一点,我需要知道文件在php的tmp目录中停留多长时间
对于上传的文件,the manual states:
如果文件尚未移走或重命名,该文件将在请求结束时从临时目录中删除 .
因此,应将要保留的文件移动到另一个位置 .
更一般地说,正如您的问题 Headers 可能暗示的那样,系统会清除临时文件夹 . 使用tempnam或tmpfile等函数时,或者只是在写入临时目录时(参见sys_get_temp_dir),都是如此 .
在Ubuntu中,这是在每次系统重启时或以 /etc/default/rcS 中定义的时间间隔完成的 .
/etc/default/rcS
在一些基于Red Hat的发行版中,它是使用来自cronjob的 tmpwatch 实用程序完成的 . 在其他情况下,使用 tmpfs 文件系统安装 /tmp 分区,该文件系统类似于RAM磁盘(因此在计算机关闭时进行清理) .
tmpwatch
tmpfs
/tmp
另一种已知的机制是大小阈值,这意味着临时目录在达到特定大小时将从旧文件中清除 .
在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/
在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."
3 回答
对于上传的文件,the manual states:
因此,应将要保留的文件移动到另一个位置 .
更一般地说,正如您的问题 Headers 可能暗示的那样,系统会清除临时文件夹 . 使用tempnam或tmpfile等函数时,或者只是在写入临时目录时(参见sys_get_temp_dir),都是如此 .
在Ubuntu中,这是在每次系统重启时或以
/etc/default/rcS
中定义的时间间隔完成的 .在一些基于Red Hat的发行版中,它是使用来自cronjob的
tmpwatch
实用程序完成的 . 在其他情况下,使用tmpfs
文件系统安装/tmp
分区,该文件系统类似于RAM磁盘(因此在计算机关闭时进行清理) .另一种已知的机制是大小阈值,这意味着临时目录在达到特定大小时将从旧文件中清除 .
在PHP中需要设置三个变量,以确保/ tmp目录的垃圾收集正确发生,它们是:
将session.gc_maxlifetime设置为您希望每个tmp文件在删除之前持续的秒数 . 如果您在OpenCart中登录管理员,这是您自动注销之前的秒数 . 例如,设置半小时,你会做60秒30分钟,这将是1800秒的值 .
其他两个变量与垃圾收集器何时运行有关,如果您遇到问题,将它们设置为上述值非常重要 .
更多信息:https://www.antropy.co.uk/blog/opencart-php-session-tmp-files-filling-up/
在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."