Php 允许非注册用户上载文件

Php 允许非注册用户上载文件,php,web-applications,upload,file-upload,Php,Web Applications,Upload,File Upload,我正在创建一项服务,允许我的网站访问者创建内容(文本)并保存它,以便他们以后可以访问它。但是,用户在使用此功能之前不需要用户帐户。他们只需点击“立即尝试”并使用它。如果他们想保存他们的工作,那么这就是他们需要注册的时间 我计划增加上传图像/文件的功能。然而,对于如何在“立即试用”模式(非登录用户)下实现这一点,我感到不知所措。在我的脑海中,我会创建一个临时用户名,并将其存储在会话中,然后创建一个相应的临时文件夹,用户的上传将转到该文件夹。但是,我该怎么清理呢?用户只需关闭浏览器,我就无法知道临时

我正在创建一项服务,允许我的网站访问者创建内容(文本)并保存它,以便他们以后可以访问它。但是,用户在使用此功能之前不需要用户帐户。他们只需点击“立即尝试”并使用它。如果他们想保存他们的工作,那么这就是他们需要注册的时间

我计划增加上传图像/文件的功能。然而,对于如何在“立即试用”模式(非登录用户)下实现这一点,我感到不知所措。在我的脑海中,我会创建一个临时用户名,并将其存储在会话中,然后创建一个相应的临时文件夹,用户的上传将转到该文件夹。但是,我该怎么清理呢?用户只需关闭浏览器,我就无法知道临时文件夹仍在使用中

有更好的方法吗?或者我应该完全阻止非注册用户上传文件吗

顺便说一下,我正在
CodeIgniter
上使用
PHP


你的投入将是无价的:)谢谢

您可能已经为您的用户提供了某种会话密钥,请将其用作临时目录名。当用户的会话超时时删除该目录,也就是说,他们已经很长时间没有处于活动状态了。对于匿名用户,“很长时间”可能只有几天。如果很难连接到会话超时,可以通过单独的清理过程来完成


您可能还想限制匿名用户可以使用的磁盘空间量,以防万一。

这里是一种可能的方法:

  • 在每个页面请求中,将会话ID-datetime对保存在数据库中
  • 对于每个保存的图像,将文件和关联的会话ID保存在数据库中

然后,您可以定期检查过时的文件。例如,如果会话限制为30分钟,则可以遍历数据库并选择每个过期的会话,即datetime+30分钟小于现在的记录。然后,删除通过这些过期会话存储的所有文件。

因此,如果您将它们放在文件夹中,请为它们指定某种临时名称,如
\u tempimage\u
,每当调用此上载脚本时,扫描这些临时文件,如果找到但未使用,请删除它们。若要检查它们是否被使用,请使用数据库将这些“立即试用”条目存储一段时间


我认为这是一个简单易行的方法。

可以通过cron作业实现“单独清理过程”,对吗?但是(对于匿名用户),我如何知道他们的目录或文件有多旧?@Obay:是的,这可能是一个cron任务。您应该能够找出每个用户的会话是否超时,如果超时,则删除这些文件。文件的访问或创建日期应该无关紧要,而是用户上次激活的时间。