2014-09-10 95 views
0

我的表单太多了。其中一个领域是如下:为什么我无法使用PHP中的Session上传文件?

<form action="go_to_preview.php" role="form" method="post" enctype="multipart/form-data"> 
    <input type="file" name="equip_image" id="equip_image"> 
</form> 

现在文件go_to_preview.php的目的是显示用户在标签的形式填写的数据。所有填写的数据也包含在隐藏字段中。此表单上还有一个提交按钮。如果用户发现他/她已填写的内容是完美的,则用户单击文件go_to_preview.php上的提交按钮。只要用户点击提交按钮,我就会将通过$_POST收到的数据添加到数据库中。 现在我的问题是我无法从包含文件控制的页面上载用户选择的文件。随着$_POST(这是目前数据的数组到隐藏字段),我要送的$_FILES阵列中的会话如下:

//go_to_preview.php 
session_start(); 
$_SESSION['FILES'] = $_FILES; 

//final.php 
session_start(); 
$files_var = $_SESSION['FILES']; 
//use $files_var 
unset($_SESSION['FILES']); 

到目前为止一切顺利。现在,当我提交表单时,我必须将所选文件上传到服务器。为此,我在final.php文件中编写了以下逻辑:

move_uploaded_file($_SESSION['FILES']['equip_image'], $target); 
unset($_SESSION['FILES']); 

函数得到正确执行,但文件没有上传到服务器。 有人可以在这方面帮助我吗? 在此先感谢。 如果你没有得到我的疑问清楚你也可以参考我的以下问题,让我的问题的明确的想法: How to get the $_FILES array data as it is after form submission in following scenario?

+0

@Flosculus:为了得到清晰的想法,你可以参考我的问题http://stackoverflow.com/questions/25752228/how-to-get-the-files-array-data-as-it-is-after- form-submission-in-following-sc – user2839497 2014-09-10 10:23:41

+0

对不起,我删除了那条评论,因为我忘记了文件数据实际上并没有存储在'$ _FILES'中。尽管如此,你是否将上传的文件移至永久的地方?因为它仅在创建请求期间是暂时的。 – Flosculus 2014-09-10 10:25:09

+1

为了澄清,您正在将图像移动到会话中,然后尝试在稍后的请求中从同一会话中检索图像?问题是PHP会话可能非常短暂,所以你会遭受频繁的数据丢失。如果你想做异步上传,你最好使用队列 - 比如PHPResque。如果你无法做到这一点,那么至少应该使用一个天真的实现,将图像移动到一个文件夹中,并将该文件夹视为一个队列。上传文件后 – 2014-09-10 10:25:17

回答

5

基于您的代码序列你想存储在会话,后来您上传的文件在final.php上使用它们进行处理或显示。您上传的所有文件都会发送到某个临时文件夹,并且您应该在连接关闭之前将其移至某个永久存储区。由于服务器将在您的连接关闭后立即删除临时文件。所以你应该把你上传的文件放在应用程序中的永久空间中,例如将具有写入权限的文件夹上传到Apache,然后您可以在会话中存储指向文件的链接。

+0

+1我不确定上一个问题的答案是否解决了这个问题。 – Flosculus 2014-09-10 10:32:53

+0

+1用于解释TEM文件。 – 2014-09-10 10:36:19

+1

基于他的问题,他希望用户填写表单,但不希望存储数据,直到用户在审核后进入最终提交阶段,因此他正在寻找将数据存储在会话中,这对于上面提到的文件来说是不可能的。 – 2014-09-10 10:37:31

相关问题