使用 SESSION 数组而不是 $_FILES 上传文件


File upload with SESSION array instead of $_FILES?

问题是:有没有办法让它与SESSION数组一起工作?

因为我已将 $_FILES["file"] 分配给 SESSION 数组,所以它不会上传文件。当我使用 var_dump($_SESSION['test'][1]["tmp_name"]) 和 var_dump($_FILES["file"]["tmp_name"]) 时,它会显示相同的值。伙计们有什么想法吗?

//THIS WONT WORK
    $_SESSION['file'][] = $_FILES["file"];
    $_SESSION['file'][] = $_FILES["file2"];
    foreach($_SESSION['file'] as $index => $name){
       move_uploaded_file($_SESSION['file'][$index]["tmp_name"], "images/" . $rename);
    }
//THIS WORKS OK
    move_uploaded_file($_FILES["file"]["tmp_name"],
    "images/" . $rename);

好的,现在几句话为什么我需要使用会话...我需要使用会话,因为我有多个文件要通过 foreach 语句上传。

print_r($_SESSION["文件"])将输出:

array(1) {
  [0]=>
  array(5) {
    ["name"]=>
    string(8) "face.jpg"
    ["type"]=>
    string(10) "image/jpeg"
    ["tmp_name"]=>
    string(31) "C:'EasyPHP-12.1'tmp'php882C.tmp"
    ["error"]=>
    int(0)
    ["size"]=>
    int(22398)
  }
}

引用手册:

该文件将在末尾从临时目录中删除 请求(如果尚未移走或重命名)。

您必须为 AJAX 脚本末尾添加的每个新文件move_uploaded_file()。如果您不希望孤立文件保留下来,则可以在提交表单之前将它们移动到临时目录中,并定期清理该目录。

  1. 您必须使用move_uploaded文件保存文件

  2. 检查$_SESSION["test"]是否存在。如果没有,请创建它,$_SESSION["test"] = array();

  3. $_SESSION["test"][] = "images/" . $rename;

  4. 您可以使用 $_SESSION["test"][count($_SESSION["test"] - 1] 访问上次上传的文件。如果您上传了单个文件,则使用 $_SESSION["test"][1] 引用它是不正确的。