保留在内存提交的文件中,直到表单有效并清理

时间:2015-12-18 22:26:08

标签: php forms validation design-patterns

在这些条件下,您是否有一个优雅的解决方案来验证服务器端包含多个输入类型文件的表单:

  • 如果一个文件无效,则用户必须上传另一个
  • 如果一个文件有效,则服务器应将其保留在内存中,以便用户不必再次上传。
  • 有效文件应显示在表格
  • 用户可以中止并离开页面。应删除服务器上保存的内容。

在我的示例中,我们采用包含1个输入类型文本和2个输入类型文件的表单。

<input type="text" name="title" />
<input type="file" name="file1" />
<input type="file" name="file2" />

用户提交有效的标题,有效的文件1但无效的文件2.

此处的目标是保存每个有效文件,直到表单有效或会话到期或某些内容过期为止:)

建议1

为用户表单生成唯一键(即form123)创建目录/ tmp / uploads / form123,保存有效文件。

每10分钟运行一次的cron遍历/ tmp / uploads /中的所有目录,并删除现有的目录超过10分钟。

有了这个建议,最大的问题是如果用户放弃表格,如何清理系统。

1 个答案:

答案 0 :(得分:0)

我认为你的建议是正确的。跟踪用户的有效/无效条目(您甚至不必将其保存到磁盘,只需获取引用并将其存储在$_SESSION全局),然后根据该条目调整表单。

如果表单无效,请将提交的有效文件存储在$_SESSION

<?php 
    // ... if the form is invalid 
    if (isset($_SESSION['file_1']) { ?>
        <!-- show a placeholder -->
        <!-- i.e. something saying 'file 1' and its name or whatever -->
    <?php } else { ?>
        <!-- show the input -->
    <?php } ?>

然后,当表单最终有效时,将您在$_SESSION中存储的值与提交的信息结合起来,以生成最终的有效表单。