【发布时间】:2026-01-22 04:20:03
【问题描述】:
我有一个包含太多字段的表单。这些字段之一如下:
<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?
【问题讨论】:
-
@Flosculus:为了获得清晰的想法,您可以参考我的问题*.com/questions/25752228/…
-
抱歉,我删除了该评论,因为我忘记了文件数据实际上并未存储在
$_FILES中。尽管如此,您是否将上传的文件移动到永久位置?因为它只是在创建请求期间是临时的。 -
澄清一下,您将图像移动到会话中,然后尝试在以后的请求中从同一会话中检索图像?问题是 PHP 会话可能非常短暂,因此您将遭受频繁的数据丢失。如果你想做异步上传,你最好使用队列——比如 PHPResque。如果你不能这样做,那么至少使用一个简单的实现,将图像移动到一个文件夹并将文件夹视为一个队列。
-
上传文件后取消设置会话。我认为你在上传之前破坏了你的会话。
-
@Flosculus:不,除了 Session 之外,我不会移动或存储任何类型的 $_FILES 数据。
标签: php forms file-upload session-variables