为什么我无法使用PHP中的Session上传文件?

时间:2014-09-10 10:21:14

标签: php forms file-upload session-variables

我有一个包含太多字段的表单。其中一个领域如下:

<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?

1 个答案:

答案 0 :(得分:5)

根据您的代码序列,您尝试将上传的文件存储在会话中,然后在final.php上使用它们进行处理或显示。您上传的所有文件都会转到某个临时文件夹,并且您应该在连接关闭之前将其移动到某个永久存储器。因为服务器将在您的连接关闭后立即删除临时文件。因此,您应该将上传的文件放在应用程序的永久空间中,例如上传具有Apache写权限的文件夹,然后您可以在会话中存储链接到您的文件。