我的多部分表单的流程基本上是回答表单->预览表单->上传到数据库
现在我在预览步骤中上传我的文件,因为POST
数据是从实际表单中新鲜的。我的问题是访问$_FILES
一次在上传到数据库功能,因为var_dump($_FILES)
返回array(0) {}
一次在upload_to_database()
。
我想实际上在预览步骤中隐藏input[type=file]
,以便我的upload_to_database()
将接收$_FILES
,但由于安全原因,这是不可能的。
如何解决这个问题?
编辑
对不起,我上面的帖子含糊不清。
我实际上想在upload_to_database()
函数中上传一次。我认为在预览阶段上传用户的文件是不好的做法,不像在上传到数据库中,他们确定自己的答案。
上传目前在预览中,因为现在它只在里面工作。当我们进入upload_to_database()
时,$_FILES
是空的。
如何从预览到upload_to_database()
获得完整和持久的$_FILES
?
你可以在第一步上传你的文件(当进入预览表单;就像你现在做的那样),将它们移动到特定的preview
目录,并在上传到数据库时将它们移动到最终目的地。
我想你使用类似会话的东西来跟踪发布的数据,所以你可以添加preview
文件路径相同的方式。
然后设置一个简单的cron作业,每xx小时删除preview
目录中超过xx小时的所有文件。
编辑:另一种选择是在javascript中完成完全客户端预览,例如在SO上预览问题和答案。
是不是可以这样做:
预览:upload_to_database($_FILES['userfile']['tmp_name']);
DB: function upload_to_database($file)
{
// work with file here
}
我的意思是提供$_FILES作为你的upload_to_database函数的参数