PHP 多个文件上传


PHP multiple files upload

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

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

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

我认为

使用 $_POST OR $_FILES 而不是$_GET['u']来验证提交,可以解决问题......

此外,您可以使用<input type="file" name="myFile[]" multiple />一次,而不是使用这么多<input type="file">进行多个文件选择。

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

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

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

好吧,上传文件的最简单方法是像您只有一个文件一样,并对您拥有的每个其他文件重复该过程,您所要做的就是为您的输入命名。我建议使用多文件输入:

<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';
                        }
                    }
                }
            }

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

我检查了您的代码,发现更改了该行:
move_uploaded_file($tmp_name, "/data/$name");

move_uploaded_file($tmp_name, "data/$name");[将绝对路径更改为相对路径]能解决问题。现在它在我的本地服务器中工作正常。这应该为您解决。

友情提供:http://forums.whirlpool.net.au/archive/788971