2015-10-03 3 views
0

Я новичок в программировании на PHP, и я пытаюсь создать сценарий загрузки нескольких файлов, но я не знаю, как проверить, существуют ли файлы для загрузки! Как я могу это сделать? Вы можете мне помочь? Это мой код:php multiple file upload, file_exist

<form action="upload.php" method="post" enctype="multipart/form-data"> 
 
<input type="file" name="files[]" multiple> 
 
<input type="submit" value="Upload"> 
 
</form> 
 

 
foreach($_FILES['files']['name'] as $i => $name) { 
 

 
\t $name = $_FILES['files']['name'][$i]; 
 
\t $size = $_FILES['files']['size'][$i]; 
 
\t $type = $_FILES['files']['type'][$i]; 
 
\t $tmp = $_FILES['files']['tmp_name'][$i]; 
 

 
\t $explode = explode('.', $name); 
 

 
\t $ext = end($explode); 
 

 
\t $path = 'uploads/'; 
 
\t $path = $path . basename($explode[0] . time() .'.'. $ext); 
 
\t 
 
\t $errors = array(); 
 

 
\t if(empty($_FILES['files']['tmp_name'][$i])) { 
 
\t \t $errors[] = 'Please choose at least 1 file to be uploaded.'; 
 
\t } 
 
\t if(empty($errors)) { 
 
\t \t 
 
\t \t if(!file_exists('uploads')) { 
 
\t \t \t mkdir('uploads', 0777); 
 
\t \t } 
 

 
\t \t if(move_uploaded_file($tmp, $path)) { 
 
\t \t \t echo '<p>The file <b>'.$name.'</b> successfully uploaded</p>'; 
 
\t \t }else { 
 
\t \t \t echo 'Something went wrong while uploading the file <b>'.$name.'</b>'; 
 
\t \t } 
 

 
\t }else { 
 
\t \t foreach($errors as $error) { 
 
\t \t \t echo '<p>'.$error.'<p>'; 
 
\t \t } 
 
\t } 
 

 
} 
 
?>

+0

Проверьте, если $ путь уже существует с file_exists ($ путь) до move_uploaded_file() –

+0

Вы уже делают, что для folder'if (! File_exists ('загрузки ')) { \t \t \t mkdir (' uploads ', 0777); \t \t} 'делать то же самое с именем файла. –

+0

Важно ли генерировать имя файла, которое включает время? – RamRaider

ответ

1

file_exists возвращает true, если файл находится в каталоге. Итак, вы должны сохранить файл move_uploaded_file внутри этого условия, если вы проверяете файлы file_exists.

Для получения дополнительной информации, проверить этот File Exist - W3 Schools

<form action="upload.php" method="post" enctype="multipart/form-data"> 
     <input type="file" name="files[]" multiple> 
     <input type="submit" value="Upload"> 
    </form> 

    foreach($_FILES['files']['name'] as $i => $name) 
    { 

     $name = $_FILES['files']['name'][$i]; 
     $size = $_FILES['files']['size'][$i]; 
     $type = $_FILES['files']['type'][$i]; 
     $tmp = $_FILES['files']['tmp_name'][$i]; 

     $explode = explode('.', $name); 

     $ext = end($explode); 

     $path = 'uploads/'; 
     $path = $path . basename($explode[0] . time() .'.'. $ext); 

     $errors = array(); 

     if(empty($_FILES['files']['tmp_name'][$i])) { 
      $errors[] = 'Please choose at least 1 file to be uploaded.'; 
     } 
     if(empty($errors)) 
     { 

      if(!file_exists($path)) 
      { 

       if(move_uploaded_file($tmp, $path)) 
       { 
        echo '<p>The file <b>'.$name.'</b> successfully uploaded</p>'; 
       } 
       else 
       { 
        echo 'Something went wrong while uploading the file <b>'.$name.'</b>'; 
       } 
      } 
     } 
     else 
     { 
      foreach($errors as $error) 
      { 
       echo '<p>'.$error.'<p>'; 
      } 
     } 

    } 
+1

Хорошо описано! ;) – user5173426

0

Это довольно трудно сделать это, учитывая, что вы даете им случайные имена. Если вы используете базу данных, рассматривая сохранение файла md5 и проверьте, есть ли у вас его.

В противном случае вы можете сохранить файл с его md5 в качестве имени файла.

Это, как вы можете получить md5 файла в:

md5_file($tmp) 
+1

Где вы видите имена файлов md5? –

+0

@Alex Пожалуйста, объясните это^ – user5173426

0

Вы могли бы попробовать что-то вдоль линий ниже. Он использует простой вызов функции preg_match, чтобы увидеть, есть ли файл с таким же именем минус отметка времени.

<?php 

    $errors = array(); 
    $path = 'uploads/'; 

    /* Check if the target directory exists - no need to do it repeatedly */ 
    if(!file_exists($path)) mkdir($path, 0777); 
    /* file_exists results are cached */ 
    clearstatcache(); 


    foreach($_FILES['files']['name'] as $i => $name) { 
     if(!empty($_FILES['files']['tmp_name'][$i])) { 
      $name = $_FILES['files']['name'][$i]; 
      $size = $_FILES['files']['size'][$i]; 
      $type = $_FILES['files']['type'][$i]; 
      $tmp = $_FILES['files']['tmp_name'][$i]; 

      $ext=pathinfo($name, PATHINFO_EXTENSION); 
      $basename=pathinfo($name, PATHINFO_FILENAME); 
      $filepath = $path . $basename . time() . '.' . $ext; 
      $pttn='@'.$basename.'\d{10}@'; 

      /* Does a file, with the name of the original, exist? */ 
      if(preg_match($pttn, implode('', glob($path .'*.*')))){ 
       /* Files already exist */ 
      } else { 
       [email protected]_uploaded_file($tmp, $filepath); 
       echo $result ? '<p>The file <b>'.$name.'</b> successfully uploaded</p>' : 'Something went wrong while uploading the file <b>'.$name.'</b>'; 
      } 
     } else { 
      $errors[] = 'Please choose at least 1 file to be uploaded.'; 
     } 
    } 
    if(!empty($errors)) echo implode('<br />', $errors); 

?>