2014-02-26 2 views
9

내 업로드 폴더로 전송하는 파일이 정상적으로 작동하지만 mkdir에 경고가 표시됩니다. 그것은 파일은 존재하지만 그림과 폴더는 자신의 이름을 생성합니다. 나는 어떤 경고가 나오는지 모른다.경고 : mkdir() : 파일이 있습니다.

누구든지 나를 도와 줄 수 있습니까?

include('connect.php'); 

$dir=substr(uniqid(),-7); // Uniqid for subdirectory 

$path = "uploads/$dir/"; // uploads/subdirectory/ // Make directory 

$valid_formats = array("jpg", "png", "jpeg", "kml"); 

$max_file_size = 2097152; 

$count = 0; 


// Loop $_FILES to execute all files 

if(!empty($_FILES)){ 
foreach($_FILES['files']['name'] as $f => $name) { 

    if ($_FILES['files']['error'][$f] == 4) { 
     continue; // Skip file if any error found 
    } 

    if ($_FILES['files']['error'][$f] == 0) {    
     if ($_FILES['files']['size'][$f] > $max_file_size) { 
      $message[] = "$name is too large!."; 
      continue; // Skip large files 
     } 

     elseif(! in_array(pathinfo($name, PATHINFO_EXTENSION), $valid_formats)){ 
      $message[] = "$name is not a valid format"; 
      continue; // Skip invalid file formats 
     } 

     else{ // No error found! Move uploaded files 
      mkdir($path, 0700); 
      $ext = pathinfo($_FILES['files']['name'][$f], PATHINFO_EXTENSION); 
      $uniq_name = substr(uniqid(),-5) . '.' .$ext; 
      $dest = $path . $uniq_name; 

      if(move_uploaded_file($_FILES["files"]["tmp_name"][$f], $dest)){ 

      $qry = "INSERT INTO files (code, name, path, type) VALUES ('$dir','$uniq_name','$dest','$ext')" ; 

      $result = mysqli_query($dbc, $qry); 
      if (false===$result) { 
      $sql_error .= 'Error in the query '.$qry.' Error Desc :'.mysqli_error($dbc).'<br /><br />' ; 
       } 
      } 

     } 

    }  
}} 

답변

20

경고는 이미 조용합니다. 이미 존재하는 디렉토리를 만들고 있습니다. 그래서 다음으로 변경하십시오 :

if (!file_exists($path)) { 
    mkdir($path, 0700); 
} 
+0

내가 사용하는 경우 {에서 mkdir ($ 경로, 0700) (file_exists ($ 경로)!); }하지만 여러 장을 업로드했지만 한 장의 사진 만 업로드합니다. 나는 어떻게해야합니까? 미안 해요. 문법. 이것은 제 첫 언어가 아닙니다. – clien

+0

파일 이름에서 폴더 경로를 구분해야합니다. @ user3199128 – Erik

10

PHP의 is_dir($path_to_dir)을 사용하여 이전에 디렉토리가 있는지 확인하십시오.

Official documentation

+6

모든 것이 파일이기 때문에 이것은 유닉스 시스템에서 문제가됩니다. 동일한 이름의 파일이 존재하면, 상기 디렉토리는 추가 될 수 없다. 따라서 "파일"이 디렉토리인지 단순히 확인하는 것만으로는 충분하지 않습니다. 대신 if (! file_exists ($ path))를 확인해야합니다. –

+0

@JacobThomason 님이 귀하의 의견을 전하면서 ​​인접한 파일과 동일한 이름의 디렉토리를 어떻게 만들겠습니까? mkdir()을 기존 디렉토리 (파일이 아닌)를 수동으로 확인한 후에 강제로 수행 할 수 있습니까? –

관련 문제