如何创建临时上传文件并在一段时间后删除它

时间:2011-06-11 12:21:01

标签: php file-upload temporary-files

是否可以将move_uploaded_file上传的文件存储到目录中并在几分钟后将其标记为删除?我试图在一段时间后将一个临时文件保留在服务器上然后它将被删除(仅当它没有被处理时)所以当一个文件被上传并移动到一个目录(如果它还没有被处理)(不要担心这部分,这将由我完成)它应该从服务器上删除文件。

您无法将临时文件保留在服务器上(不使用move_uploaded_file),因此基本上存储在服务器上的tmp目录中如何在上传到临时文件时保留文件目录(或移动到目录)并“标记”它以便稍后删除,如果不处理。

我试图研究这是如何可能的,但我没有找到任何类型的问题/主题,关于如何创建一个临时文件,以便在一段时间后停留。

编辑:为了澄清,我不希望在上传后脚本完成执行后删除文件。

3 个答案:

答案 0 :(得分:4)

请按照以下步骤操作:

首先使用通常的move_upload_file函数并将文件保存在服务器上。

现在创建一个新的php程序来执行此操作:

  1. 使用filetime函数确定文件的上次编辑时间。因此,您可以检查它是否最近处理过。
  2. 将上述日期/时间与删除条件进行比较。
  3. 使用php unlink函数删除旧文件。
  4. 现在每天以cron的形式运行上述程序。

答案 1 :(得分:2)

没有自动方式。有些服务器会在一段时间后定期清除/ tmp目录中的文件,但唯一可以确定的方法是编写自己的清理脚本并作为cron作业运行。 (或者使用穷人的cron并让你的脚本触发清理检查,这是一种不太可靠但有时可行的方法。)

您可以标记数据库或文本文件中文件的过期时间,也可以只使用文件系统时间戳来检查过期文件。

更复杂的解决方案是将文件移动到像Redis这样的缓存中,您可以在其中设置到期时间(TTL),但这取决于您存储的数据类型,并且是一种有点深奥的解决方案。

答案 2 :(得分:1)

我有另一种使用的方法。我将文件移动到临时位置。处理后,它将不会在固定时间内删除。而是下次脚本运行时,它将删除所有先前上载和处理的文件。这避免了cron作业的要求。消除一点头痛。