복붙노트

HTTP POST를 사용하여 HTML 및 PHP로 여러 파일을 선택하고 업로드하려면 어떻게합니까?

PHP

HTTP POST를 사용하여 HTML 및 PHP로 여러 파일을 선택하고 업로드하려면 어떻게합니까?

필자는 을 사용하여 단일 파일 업로드로이 작업을 수행 한 경험이 있습니다. 그러나 한 번에 둘 이상을 업로드하는 데 문제가 있습니다.

예를 들어 일련의 이미지를 선택한 다음 서버에 업로드 할 수 있습니다.

가능한 경우 단일 파일 입력 컨트롤을 사용하는 것이 좋습니다.

아무도 이것을 수행하는 방법을 알고 있습니까? 감사!

해결법

  1. ==============================

    1.HTML5에서도 가능합니다. 예제 (PHP 5.4) :

    HTML5에서도 가능합니다. 예제 (PHP 5.4) :

    <!doctype html>
    <html>
        <head>
            <title>Test</title>
        </head>
        <body>
            <form method="post" enctype="multipart/form-data">
                <input type="file" name="my_file[]" multiple>
                <input type="submit" value="Upload">
            </form>
            <?php
                if (isset($_FILES['my_file'])) {
                    $myFile = $_FILES['my_file'];
                    $fileCount = count($myFile["name"]);
    
                    for ($i = 0; $i < $fileCount; $i++) {
                        ?>
                            <p>File #<?= $i+1 ?>:</p>
                            <p>
                                Name: <?= $myFile["name"][$i] ?><br>
                                Temporary file: <?= $myFile["tmp_name"][$i] ?><br>
                                Type: <?= $myFile["type"][$i] ?><br>
                                Size: <?= $myFile["size"][$i] ?><br>
                                Error: <?= $myFile["error"][$i] ?><br>
                            </p>
                        <?php
                    }
                }
            ?>
        </body>
    </html>
    

    다음은 파일 대화 상자에서 2 개의 항목을 선택한 후 Chrome에서 보이는 모습입니다.

    그리고 "업로드"버튼을 클릭 한 후 나타나는 모습입니다.

    이것은 완전히 작동하는 답변의 단순한 스케치 일뿐입니다. PHP에서 파일 업로드를 적절하고 안전하게 처리하는 방법에 대한 자세한 내용은 PHP Manual : 파일 업로드 처리를 참조하십시오.

  2. ==============================

    2.실제로 여러 파일 업로드를 만들기 위해해야 ​​할 일이 있습니다. Java, Ajax, Flash를 사용할 필요가 없습니다. 로 시작하는 정상적인 파일 업로드 양식을 작성하십시오.

    실제로 여러 파일 업로드를 만들기 위해해야 ​​할 일이 있습니다. Java, Ajax, Flash를 사용할 필요가 없습니다. 로 시작하는 정상적인 파일 업로드 양식을 작성하십시오.

    <form enctype="multipart/form-data" action="post_upload.php" method="POST">
    

    성공의 열쇠.

    <입력 유형 = "파일"이름 = "파일 []"다중 />

    그 괄호를 잊지 마라! post_upload.php에서 다음을 시도하십시오.

    <?php print_r($_FILES['file']['tmp_name']); ?>
    

    tmp_name 데이터가있는 배열을 얻을 수 있습니다. 그러면 'number'라는 파일을 사용하여 세 번째 쌍의 대괄호를 사용하여 각 파일에 액세스 할 수 있습니다.

    $_FILES['file']['tmp_name'][0]
    

    PHP count ()를 사용하여 선택된 파일 수를 계산할 수 있습니다. 잘 했어!

  3. ==============================

    3.Firefox 5의 전체 솔루션 :

    Firefox 5의 전체 솔루션 :

    <html>
    <head>
    </head>
    <body>
     <form name="uploader" id="uploader" action="multifile.php" method="POST" enctype="multipart/form-data" >
      <input id="infile" name="infile[]" type="file" onBlur="submit();" multiple="true" ></input> 
     </form>
    
    <?php
    echo "No. files uploaded : ".count($_FILES['infile']['name'])."<br>"; 
    
    
    $uploadDir = "images/";
    for ($i = 0; $i < count($_FILES['infile']['name']); $i++) {
    
     echo "File names : ".$_FILES['infile']['name'][$i]."<br>";
     $ext = substr(strrchr($_FILES['infile']['name'][$i], "."), 1); 
    
     // generate a random new file name to avoid name conflict
     $fPath = md5(rand() * time()) . ".$ext";
    
     echo "File paths : ".$_FILES['infile']['tmp_name'][$i]."<br>";
     $result = move_uploaded_file($_FILES['infile']['tmp_name'][$i], $uploadDir . $fPath);
    
     if (strlen($ext) > 0){
      echo "Uploaded ". $fPath ." succefully. <br>";
     }
    }
    echo "Upload complete.<br>";
    ?>
    
    </body>
    </html>
    
  4. ==============================

    4.찾아보기를 선택할 때 표시되는 파일 선택자 대화 상자에서 여러 파일을 선택하려면 대부분 운이 좋지 않습니다. Java 애플릿이나 비슷한 것을 사용해야 할 것입니다 (작은 플래시 파일을 사용하는 파일이 있다고 생각합니다. 찾으면 업데이트 할 것입니다). 현재 단일 파일 입력은 단일 파일의 선택 만 허용합니다.

    찾아보기를 선택할 때 표시되는 파일 선택자 대화 상자에서 여러 파일을 선택하려면 대부분 운이 좋지 않습니다. Java 애플릿이나 비슷한 것을 사용해야 할 것입니다 (작은 플래시 파일을 사용하는 파일이 있다고 생각합니다. 찾으면 업데이트 할 것입니다). 현재 단일 파일 입력은 단일 파일의 선택 만 허용합니다.

    여러 개의 파일 입력을 사용하는 것에 대해 이야기하고 있다면, 하나를 사용하는 것과는 큰 차이가 없어야합니다. 몇 가지 코드를 게시하면 더 도움이 될 것입니다.

    최신 정보: 플래시를 사용하는 단일 '찾아보기'버튼을 사용하는 한 가지 방법이 있습니다. 나는 이것을 개인적으로 사용한 적이 없지만 그것에 대해 상당한 금액을 읽었다. 나는 그게 당신의 최고의 샷이라고 생각합니다.

    http://swfupload.org/

  5. ==============================

    5.처음에는 다음과 같이 형식을 만들어야합니다.

    처음에는 다음과 같이 형식을 만들어야합니다.

    <form method="post" enctype="multipart/form-data" >
       <input type="file" name="file[]" multiple id="file"/>
       <input type="submit" name="ok"  />
    </form> 
    

    그거 맞아 . 이제이 코드를 양식 코드 나 원하는 페이지에 추가하십시오.

    <?php
    if(isset($_POST['ok']))
       foreach ($_FILES['file']['name'] as $filename) {
        echo $filename.'<br/>';
    }
    ?>
    

    쉬운 ... 마무리

  6. ==============================

    6.여러 입력 필드를 사용하는 경우 name = "file []"(또는 다른 이름)을 설정할 수 있습니다. 그것들을 배열에 넣으면 $ _FILES [ 'file'] = 배열 ​​({file_array}, {file_array}))

    여러 입력 필드를 사용하는 경우 name = "file []"(또는 다른 이름)을 설정할 수 있습니다. 그것들을 배열에 넣으면 $ _FILES [ 'file'] = 배열 ​​({file_array}, {file_array}))

  7. ==============================

    7.무료, Uploadify 인 플래시 기반 업 로더가 하나 더 있습니다.

    무료, Uploadify 인 플래시 기반 업 로더가 하나 더 있습니다.

    Holger - Amidalla 검색 엔진

  8. ==============================

    8.

    <form action="" method="POST" enctype="multipart/form-data">
      Select image to upload:
      <input type="file"   name="file[]" multiple/>
      <input type="submit" name="submit" value="Upload Image" />
    </form>
    

    FOR 루프 사용하기

    <?php    
      $file_dir  = "uploads";    
      if (isset($_POST["submit"])) {
    
        for ($x = 0; $x < count($_FILES['file']['name']); $x++) {               
    
          $file_name   = $_FILES['file']['name'][$x];
          $file_tmp    = $_FILES['file']['tmp_name'][$x];
    
          /* location file save */
          $file_target = $file_dir . DIRECTORY_SEPARATOR . $file_name; /* DIRECTORY_SEPARATOR = / or \ */
    
          if (move_uploaded_file($file_tmp, $file_target)) {                        
            echo "{$file_name} has been uploaded. <br />";                      
          } else {                      
            echo "Sorry, there was an error uploading {$file_name}.";                               
          }                 
    
        }               
      }    
    ?>
    

    FOREACH 루프 사용

    <?php
      $file_dir  = "uploads";    
      if (isset($_POST["submit"])) {
    
        foreach ($_FILES['file']['name'] as $key => $value) {                   
    
          $file_name   = $_FILES['file']['name'][$key];
          $file_tmp    = $_FILES['file']['tmp_name'][$key];
    
          /* location file save */
          $file_target = $file_dir . DIRECTORY_SEPARATOR . $file_name; /* DIRECTORY_SEPARATOR = / or \ */
    
          if (move_uploaded_file($file_tmp, $file_target)) {                        
            echo "{$file_name} has been uploaded. <br />";                      
          } else {                      
            echo "Sorry, there was an error uploading {$file_name}.";                               
          }                 
    
        }               
      }
    ?>
    
  9. ==============================

    9.나는 여러 이미지를 업로드하는 데 사용되는 PHP 함수를 만들었습니다. 이 기능은 특정 폴더에 여러 이미지를 업로드 할 수 있으며 데이터베이스에 레코드를 저장할 수 있습니다. 다음 코드에서 $ arrayimage는 양식을 통해 전송되는 이미지 배열입니다. 업로드를 여러 번 사용할 수는 없지만 버튼 클릭시 파일 unput의 동적 추가 필드를 설정할 수있는 것과 동일한 이름의 다른 입력 필드를 만들어야한다는 점에 유의하십시오.

    나는 여러 이미지를 업로드하는 데 사용되는 PHP 함수를 만들었습니다. 이 기능은 특정 폴더에 여러 이미지를 업로드 할 수 있으며 데이터베이스에 레코드를 저장할 수 있습니다. 다음 코드에서 $ arrayimage는 양식을 통해 전송되는 이미지 배열입니다. 업로드를 여러 번 사용할 수는 없지만 버튼 클릭시 파일 unput의 동적 추가 필드를 설정할 수있는 것과 동일한 이름의 다른 입력 필드를 만들어야한다는 점에 유의하십시오.

    $ dir은 이미지를 저장하려는 디렉토리입니다 $ fields는 데이터베이스에 저장하려는 필드의 이름입니다.

    데이터베이스 필드는 배열 형식이어야합니다. 예 데이터베이스 imagestore 및 ID, 이름, 주소와 같은 필드 이름이 있으면 다음과 같은 데이터를 게시해야합니다.

    $fields=array("id"=$_POST['idfieldname'], "name"=$_POST['namefield'],"address"=$_POST['addressfield']);
    

    그 필드를 function $ fields로 넘겨 준다.

    $ table은 데이터를 저장하려는 테이블의 이름입니다.

    function multipleImageUpload($arrayimage,$dir,$fields,$table)
    {
        //extracting extension of uploaded file
        $allowedExts = array("gif", "jpeg", "jpg", "png");
        $temp = explode(".", $arrayimage["name"]);
        $extension = end($temp);
    
        //validating image
        if ((($arrayimage["type"] == "image/gif")
        || ($arrayimage["type"] == "image/jpeg")
        || ($arrayimage["type"] == "image/jpg")
        || ($arrayimage["type"] == "image/pjpeg")
        || ($arrayimage["type"] == "image/x-png")
        || ($arrayimage["type"] == "image/png"))
    
        //check image size
    
        && ($arrayimage["size"] < 20000000)
    
        //check iamge extension in above created extension array
        && in_array($extension, $allowedExts)) 
        {
            if ($arrayimage["error"] > 0) 
            {
                echo "Error: " . $arrayimage["error"] . "<br>";
            } 
            else 
            {
                echo "Upload: " . $arrayimage["name"] . "<br>";
                echo "Type: " . $arrayimage["type"] . "<br>";
                echo "Size: " . ($arrayimage["size"] / 1024) . " kB<br>";
                echo "Stored in: ".$arrayimage['tmp_name']."<br>";
    
                //check if file is exist in folder of not
                if (file_exists($dir."/".$arrayimage["name"])) 
                {
                    echo $arrayimage['name'] . " already exists. ";
                } 
                else 
                {
                    //extracting database fields and value
                    foreach($fields as $key=>$val)
                    {
                        $f[]=$key;
                        $v[]=$val;
                        $fi=implode(",",$f);
                        $value=implode("','",$v);
                    }
                    //dynamic sql for inserting data into any table
                    $sql="INSERT INTO " . $table ."(".$fi.") VALUES ('".$value."')";
                    //echo $sql;
                    $imginsquery=mysql_query($sql);
                    move_uploaded_file($arrayimage["tmp_name"],$dir."/".$arrayimage['name']);
                    echo "<br> Stored in: " .$dir ."/ Folder <br>";
    
                }
            }
        } 
        //if file not match with extension
        else 
        {
            echo "Invalid file";
        }
    }
    //function imageUpload ends here
    }
    

    // imageFunctions 클래스는 여기서 끝납니다.

    당신은이 코드를 사용하여 확장 된 이미지를 여러 개 삽입 할 수 있습니다.이 함수는 이미지 파일을 검사하기 위해 만들어지며, 코드에서 범용 파일의 확장 목록을 바꿀 수 있습니다

  10. ==============================

    10.부분 답변 : pear HTTP_UPLOAD가 유용 할 수 있습니다. http://pear.php.net/manual/en/package.http.http-upload.examples.php

    부분 답변 : pear HTTP_UPLOAD가 유용 할 수 있습니다. http://pear.php.net/manual/en/package.http.http-upload.examples.php

    여러 파일에 대한 완전한 예제가 있습니다.

  11. from https://stackoverflow.com/questions/1175347/how-can-i-select-and-upload-multiple-files-with-html-and-php-using-http-post by cc-by-sa and MIT license