2012-06-11 170 views
-2

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

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

没有文件发送?有问题!我怎样才能访问从数组输入标签上传的文件?

+0

echo声明是否触发底部? – MrCode

+0

用MAMP在我的Mac上本地运行这个工作正常,文件上传时没有任何问题。可能是你的设置,而不是代码 – Luke

+0

它工作正常吗?我是唯一一个不工作的人? echo语句打印这个句子,但有人提出我的问题! – user1448411

回答

-1

我检查你的代码,并发现,改变行:
move_uploaded_file($tmp_name, "/data/$name");
move_uploaded_file($tmp_name, "data/$name");
[更改为相对路径绝对路径] 的伎俩。现在它在我的本地服务器上正常工作。这应该为你解决它。

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

+0

不适合我...同样的错误! – user1448411

+0

在包含php文件的文件夹中是否有一个名为'data'的文件夹? '数据'也应该有写权限。请确保。 – saji89

+0

为确保问题不在目标目录中,请尝试用'move_uploaded_file($ tmp_name,$ name);'替换相关行并查看它是否有效。如果有效,上传的文件应该在你的'C:\ xampp \ htdocs \ php'文件夹中找到。在Windows中,目录分隔符是'\\',而在Linux中它可能是导致问题的'/'。但是这个检查可以帮助你确定这不是你的情况。 – saji89

0

我认为使用$_POST$_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目录“(Provi德读/写权限临时opload目录)

该工程确定在我的WAMP服务器上面的修改设置& ...祝你好运!

0

那么,上传文件的最简单方法就像您只有一个文件一样,并为您拥有的其他所有文件重复该过程,您只需输入一个名称即可。我会建议使用多个文件输入:

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

然后,您可以处理一个简单的上传为:

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将文件移动到您的目录。