如何正确发送 $_FILES 到 $_SESSION 变量?

Posted

技术标签:

【中文标题】如何正确发送 $_FILES 到 $_SESSION 变量?【英文标题】:How to send $_FILES to $_SESSION variable properly? 【发布时间】:2021-09-15 16:02:27 【问题描述】:

我最近开始使用 php 开发图像上传 Web 应用程序,我计划在从之前的表单中获取 $_FILES 变量后将其发送到另一个表单。

例如: form1 有一个 <input type="file" name="image">。在那之后, form2 使用 $_FILES['image'] 接收它,并希望通过 $_SESSION['image'] = $_FILES['image'] 将其发送到 form3

问题是,在我尝试使用该会话变量move_uploaded_file() 之后,文件并没有移到目录中。我的upload 目录(我在其中存储所有图像)是空的。

这就是我尝试移动文件的方式:

$file = "upload/".$link.".".pathinfo($_SESSION['file']['name'], PATHINFO_EXTENSION);
move_uploaded_file($_SESSION['file']['tmp_name'], $file);

不用担心$link。这只是我在链接中使用的一些“键”(一种自动生成链接的方法)。

我也尝试过声明另一个$_FILES变量并将其赋值为$_SESSION['file'],然后在move_uploaded_file()中使用,但还是不行。

我的问题是:是否可以将$_FILES 变量正确传递给$_SESSION?如果是的话,它怎么会在我的情况下不起作用。我做错了什么?

如果您需要更多代码和(或)信息,请随时发表评论,我会尽快提供给您。

【问题讨论】:

【参考方案1】:

问题在于$_FILES 数组仅指向保存文件的临时位置。它不直接包含文件数据。

在您的初始请求结束后,该临时文件会自动删除。因此,虽然$_FILES 可能会保留在会话中,但实际文件本身不会。您需要在初始请求期间将其保存在某处(使用move_uploaded_file()),然后将对保存文件的引用放入会话中,而不是原始$_FILES 数据。

【讨论】:

以上是关于如何正确发送 $_FILES 到 $_SESSION 变量?的主要内容,如果未能解决你的问题,请参考以下文章

通过 HTTPWebRequest 发送文件并在网络服务器上从 $_FILES 接收

如何接收从 Files App 发送到我的应用程序的多个文件

在 ReactJs 中使用 axios 发送 POST 请求时 $_FILES 为空

PHP 超级全局变量

如何使用 C++ 发送 APDU 命令?

用PHP重命名$ _FILES(文件)