-2

是的,我知道有数百个类似的问题,但我没有找到有效的答案......问题是:我要上传多个文件......正确的方法应该是这样的:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
</head>

<body>
<form enctype="multipart/form-data" method="post" action="?u=1">
 <input  type="file" name="myFile[]" />
 <input  type="file" name="myFile[]" />
 <input  type="file" name="myFile[]" />
<input type="submit" value="Upload!" name="submit"/>
</form>
<?
if ($_GET['u']){
foreach ($_FILES["myFile"]["error"] as $key => $error) {
 if ($error == UPLOAD_ERR_OK) {
   $tmp_name = $_FILES["myFile"]["tmp_name"][$key];
   $name = $_FILES["myFile"]["name"][$key];
   // here we move it to a directory called data
   // you can move it wherever you want
   move_uploaded_file($tmp_name, "/data/$name");
 } else {
   // an error occurred, handle it here
 }
}
}

if (!$_FILES){
    echo 'WTF?? No files sent?? There\'s a problem! Let\' hope that stack overflow will solve it!';
}
?>

</body>
</html>

输出是:

Notice: Undefined index: myFile in C:\xampp\htdocs\php\prova.php on line 18

Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\php\prova.php on line 18

没有文件发送??有问题!如何访问从数组输入标签上传的文件?

4

3 回答 3

0

我认为使用$_POSTOR$_FILES而不是$_GET['u']从提交中进行验证,可以解决问题......

您也可以使用<input type="file" name="myFile[]" multiple />一次而不是<input type="file">多次选择多个文件。

注意:检查 php.ini 的以下设置:(根据需要编辑,保存并重新启动服务器)

  1. 文件上传 = 开
  2. upload_max_filesize = 2M(默认情况下它的 2 MB 文件限制!!!如果文件大小 > 2MB,则会发生与您的完全相同的错误)
  3. post_max_size = 8M(默认情况下 post 变量限制为 8 MB。根据您的要求更改...)
  4. upload_tmp_dir = "c:/tmp" (提供对临时 opload 目录的读/写权限)

通过上述更改和设置,这在我的 wamp 服务器中可以正常工作......祝你好运!

于 2013-11-29T17:14:39.163 回答
0

好吧,上传文件的最简单方法是假装只有一个文件,然后对所有其他文件重复此过程,您所要做的就是为您的输入命名。我建议使用多文件输入:

<input type="file" name="file[]" id="file" multiple>

然后,您可以使用简单的 for 处理上传:

if(isset($_FILES['file']['tmp_name']))
            {
//set upload directory
                $target_dir = "uploads/";
                $num_files = count($_FILES['file']['tmp_name']);
                for($i=0; $i < $num_files;$i++)
                {
                    if(!is_uploaded_file($_FILES['file']['tmp_name'][$i]))
                    {
                        $messages[] = 'No file uploaded';
                    }
                    else
                    {
                        if(@copy($_FILES['file']['tmp_name'][$i],$target_dir.'/'.$form['name']->getData()."/".$_FILES['file']['name'][$i]))
                        {
                            $messages[] = $_FILES['file']['name'][$i].' uploaded';
                        }
                        else
                        {
                            $messages[] = 'Uploading '.$_FILES['file']['name'][$i].' Failed';
                        }
                    }
                }
            }

您可以使用 copy 或 move_uploaded_file 将文件移动到您的目录。

于 2014-11-09T13:13:46.743 回答
-1

我检查了您的代码,发现将行:更改
move_uploaded_file($tmp_name, "/data/$name");
move_uploaded_file($tmp_name, "data/$name");
[将绝对路径更改为相对路径] 可以解决问题。现在它工作正常,在我的本地服务器上。那应该为你解决它。

礼貌http ://forums.whirlpool.net.au/archive/788971

于 2012-06-11T11:49:43.693 回答