2016-12-11 8 views
1

안녕하세요 PHP 파일을 여러 개 업로드하지만 양식이 모든 필드를 업로드하지 않아도됩니다 (적어도 하나의 필드 업로드 만 필요함). 두 번째 입력 필드를 업로드하지 마십시오.PHP - 여러 파일 업로드, 일부 필드를 업로드하지 않으면 오류가 발생합니다.

문제는 사용자가 파일을 하나만 업로드하면 "잘못된 파일"(최종 else 문) 오류가 발생합니다. 하지만 사용자가 2 개의 필드를 모두 업로드하면 오류가 발생하지 않습니다. 오류는 null 업로드 필드에서 발생했다고 생각합니다. 그래서 먼저 비어 있지 않더라도 사용합니다. 그러나 작동하지 않습니다. 어떻게해야합니까? 당신은 첫 번째 라인을 변경할 수 있습니다

if(!empty($_FILES)) 
{ 
     $count = count($_FILES["images"]["name"]); 

    for($i=1; $i <= $count; $i++) 
    { 
     if ((($_FILES["images"]["type"][$i-1] == "image/gif") 
      || ($_FILES["images"]["type"][$i-1] == "image/jpeg") 
      || ($_FILES["images"]["type"][$i-1] == "image/png")) 
      && ($_FILES["images"]["size"][$i-1] < 2000000)) //2 MB 
     { 

      if ($_FILES["images"]["error"][$i-1] > 0) 
      { 
       echo "File Error : " . $_FILES["images"]["error"][$i] . "<br />"; 
      } 
      else 
      { 
       if (file_exists("path/to/".$_FILES["images"]["name"][$i-1])) 
       { 
        echo "<b>".$_FILES["images"]["name"][$i-1] . " already exists. </b>"; 
       } 
       else 
       { 
        $newname = date('Y-m-d')."_".$i.".jpg"; 
        move_uploaded_file($_FILES["images"]["tmp_name"][$i-1] , "path/to/".$newname); 

       } 
       } 
      } 
       else 
       { 
        echo "Invalid file" ; 
        exit(); 
       } 
      } 
     } 

답변

2

upload.php로 페이지

<form action="upload.php" method="post" enctype="multipart/form-data">   
      Image 1 : 
       <input type="file" name="images[]" /> 
       <br> 
      image 2 : 
       <input type="file" name="images[]" /> <br> 

       <input type="submit" value="Upload" /> 
</form> 

: 하나 또는 여러 개의 파일로

if(isset($_FILES["images"]["name"][0])) { 

이와 줄에

을 사용할 수 있습니다 :

echo "Invalid file" ; 
exit(); 

첫 번째 파일에 문제가있는 경우 응용 프로그램을 종료하고 두 번째 파일이나 다른 파일을 처리하지 않기 때문에 문제가 될 수 있습니다.

내가 당신도이 코드를 제안 :

<?php 
if (isset($_FILES["images"]["name"][0])) { 
$path_upload = 'path/upload/'; 
$count = count($_FILES["images"]["name"]); 
$allowed_types = array("image/gif", "image/jpeg", "image/png"); 
$nl = PHP_EOL.'<br>'; // Linux: \n<br> Window: \r\n<br> 

for($i=0; $i < $count; $i++) 
{ 
    $file_type = $_FILES["images"]['type'][$i]; 
    $file_name = $_FILES["images"]['name'][$i]; 
    $file_size = $_FILES["images"]['size'][$i]; 
    $file_error = $_FILES["images"]['error'][$i]; 
    $file_tmp = $_FILES["images"]['tmp_name'][$i]; 

    if (in_array($file_type, $allowed_types) && $file_size < 2000000) { 

     if ($file_error > 0) { 

      echo 'Upload file:'.$file_name.' error: '.$file_error.$nl; 

     } else { 

      $path_new_upload = $path_upload.$file_name; 

      // verify while filename exists 
      while (file_exists($path_new_upload)) { 

       $ext = explode('.', $file_name); // explode dots on filename 
       $ext = end($ext); // get last item of array 
       $newname = date('Y-m-d_').$i.'.'.$ext; 

       $path_new_upload = $path_upload.$newname; 

      } 

      move_uploaded_file($file_tmp, $path_new_upload); 

     } 


    } else { 

     echo 'Invalid file type to: '.$file_name.$nl; 
     // continue the code 
    } 
} 

}

더 좋을 수있다,이 새로운 창조에 파일 이름을 확인합니다.