Php 创建目录并使用单个浏览按钮上载多个文件时

Php 创建目录并使用单个浏览按钮上载多个文件时,php,html,Php,Html,我试图用一个浏览按钮上传多个文件,但我没能成功。我尝试了类似问题中提到的建议。下面的代码是只上传一个文件,我需要上传多个文件与相同的浏览按钮 知道代码中有什么错误吗 <html> <body> <form enctype="multipart/form-data" action="uploadj.php" method="POST"> <input type="hidden" name="MAX_FILE_SIZE" value="100000" /&

我试图用一个浏览按钮上传多个文件,但我没能成功。我尝试了类似问题中提到的建议。下面的代码是只上传一个文件,我需要上传多个文件与相同的浏览按钮

知道代码中有什么错误吗

<html>
<body>

<form enctype="multipart/form-data" action="uploadj.php" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
Choose a file to upload: <input name="uploadedfile[]" type="file" multiple /><br />



  <p>

    <input type="submit" name="button" id="button" value="Submit">
  </p>

</form>


</html>
</body>

Php Code :


   <?php

$get_folder = $_POST['textfield'];
mkdir ("/opt/lampp/htdocs/test_upload/" . $get_folder, 0777);
echo "Analysis Directory created successfully";

$target_path = "$get_folder/";


for($i=0;$i < count($_FILES['uploadedfile']['name']);$i++){



$target_path = $target_path . basename( $_FILES['uploadedfile']['name'][$i]);


if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'][$i], $target_path))
{
    echo "The file has been uploaded";

} else

{
  echo "There was an error uploading the file, please try again!";
}


}



?>

选择要上载的文件:

Php代码:

谢谢

您的一个错误是在定义它之前使用了
$target\u path
。我指的是:

$target_path = $target_path . basename( $_FILES['uploadedfile'][0]['name']);
如果先前未定义
$target\u path,则不能在右侧使用该路径。除此之外,0位于错误的位置。它应该是
$\u文件['uploadedfile']['name'][0]

您可能存在的其他错误:

  • php.ini中的文件上载大小不够大
  • php.ini中的最大输入大小不够高
  • Web服务器用户(通常是www数据或apache)无法写入文件夹
  • 更新

    另一个错误是,您只是在循环中添加了
    $target\u path
    ,这使得第二次迭代尝试将上一次上载用作文件夹,这是不允许的。例如,如果我上传了foo.png和bar.jpg,第二个目标路径将是
    /opt/lampp/htdocs/test\u upload/foo.png/bar.png
    ,这不是有效路径

    我会在你的循环中通过改变这一行来解决这个问题:

    $target_path = $target_path . basename( $_FILES['uploadedfile']['name'][$i]);
    
    致:

    和变化:

    if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'][$i], $target_path))
    
    致:

    更新2

    以下代码适用于我的服务器(Ubuntu服务器,上载文件夹属于www数据,权限为755):

    
    选择要上载的文件:


    这是错误的:$\u文件['uploadedfile'][0]['name']

    您应该执行以下操作:$\u文件['uploadedfile']['name'][0]

    我已经更新了这段代码以支持多次上传。让我知道这是否有效

         for($i=0;$i<count($_FILES['uploadedfile']['tmp_name']);$i++){
          $target_path = ""; //to clear the values on each loop//
          $target_path = basename( $_FILES['uploadedfile']['name'][$i]);
          move_uploaded_file($_FILES['uploadedfile']['tmp_name'][$i], $target_path);
         }
    
    对于($i=0;$i形式:

    
    选择要上载的文件:

    PHP代码:

     if(isset($_POST['button'])){
         $upload_folder = "./textfiles/";
         for($i=0;$i<count($_FILES['uploadedfile']['tmp_name']);$i++){
              $target_path = ""; //to clear the values on each loop//
              $target_path = $upload_folder.basename( $_FILES['uploadedfile']['name'][$i]);
              if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'][$i], $target_path))
                 {
                 //do your redirect
                 }else {
                    //do your redirect
                 }
       }
      }
    
    if(设置($\u POST['button'])){
    $upload_folder=“./textfiles/”;
    
    for($i=0;$i感谢您的回复!我尝试了您的建议,但仅上传了一个文件,而不是多个。您知道原因是什么吗?我不确定,但您可以这样做:
    code
    ($i=0;$i在这部分我已经尝试过了,但是只有一个文件正在上传,我需要上传多个文件。你能用你目前为止所做的更新你的代码吗?移动上传的文件($上传文件['uploadedfile']['tmp\U name'][$i],$target\U路径);如果您将它放在该循环中,它应该上载多个文件,因为$i在每次迭代中都在更改。下面是修改后的php代码:我以前定义了target.path。但问题是它只上载一个文件,而不是多个文件。@kabir这是因为您使用循环来访问每个项目。@Travis您检查过了吗我修改过的代码中我使用了循环。但是它只上传了一个文件-@kabir,你在循环中使用了
    $target\u path
    。因为你在上一次迭代中使用了它,所以第二个路径类似于“/opt/lampp/htdocs/test\u upload/foo.png/bar.jpg”,因为foo.png是一个文件而不是一个文件夹,所以它不能移动将其发送到该位置。我将更新我的答案。我正在尝试上载文本文件。实际上,我正在尝试创建一个目录,然后在其中上载文件。因此,对于一个文件,它可以完美地工作,但对于多个文件,它不能工作。我很欣赏您的帮助。非常感谢您的耐心。但是当我单击“浏览”按钮时(例如,当我第一次单击“浏览”按钮时,du.txt被加载;当我第二次单击“浏览”按钮时,Document.txt被加载。但当我单击“提交”按钮时,只提交最后一个文件,即Document.txt,我需要这两个文件)。这就是问题所在。非常感谢。啊,这可能是问题所在。请尝试这样做:当您单击“浏览”按钮时,按ctrl键,然后单击需要上载的多个文件。
    <?php if($_SERVER['REQUEST_METHOD'] != 'POST'):?>
    <html>
    <body>
    
    <form enctype="multipart/form-data" action="index2.php" method="POST">
    Choose a file to upload: <input name="uploadedfile[]" type="file" multiple /><br />
    
    
    
      <p>
    
        <input type="submit" name="button" id="button" value="Submit">
      </p>
    
    </form>
    
    
    </html>
    </body>
    
    <?php else: ?>
    
    <?php
    
    $target_path = "./videos/";
    
    
    for($i=0;$i < count($_FILES['uploadedfile']['name']);$i++){
    
    
    
    $target_file = $target_path . basename( $_FILES['uploadedfile']['name'][$i]);
    
    
    if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'][$i], $target_file))
    {
        echo "The file has been uploaded";
    
    } else
    
    {
      echo "There was an error uploading the file, please try again!";
    }
    
    
    }
    ?>
    
    <?php endif; ?>
    
         for($i=0;$i<count($_FILES['uploadedfile']['tmp_name']);$i++){
          $target_path = ""; //to clear the values on each loop//
          $target_path = basename( $_FILES['uploadedfile']['name'][$i]);
          move_uploaded_file($_FILES['uploadedfile']['tmp_name'][$i], $target_path);
         }
    
    <form enctype="multipart/form-data" action="" method="POST">
    <input type="hidden" name="MAX_FILE_SIZE" value="100000" />
    Choose a file to upload: <input name="uploadedfile[]" type="file" multiple /><br />
    
     <p>
     <input type="submit" name="button" id="button" value="Submit">
     </p>
    
    </form>
    
     if(isset($_POST['button'])){
         $upload_folder = "./textfiles/";
         for($i=0;$i<count($_FILES['uploadedfile']['tmp_name']);$i++){
              $target_path = ""; //to clear the values on each loop//
              $target_path = $upload_folder.basename( $_FILES['uploadedfile']['name'][$i]);
              if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'][$i], $target_path))
                 {
                 //do your redirect
                 }else {
                    //do your redirect
                 }
       }
      }