2016-10-12 3 views
-2

Я хочу переименовать загруженный файл, если он уже существует. Я хочу переименовать его в img1.jpg, img2.jpg, если он уже существует. я пробовал много примеров, но ничего не костюмов для этого ниже кода:Переименуйте файл, если он уже существует. Загрузка файла -файла

<?php 
 
$valid_formats = array(
 
    "jpg", 
 
    "png", 
 
    "gif", 
 
    "zip", 
 
    "bmp", 
 
    "pdf", 
 
    "docx", 
 
    "PDF", 
 
    "xlxc" 
 
); 
 
$max_file_size = 3024; 
 
$path   = "images/"; // Upload directory 
 
$count   = 0; 
 

 
if (isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST") { 
 
    $fname = $_FILES['attach']['name']; 
 
    foreach ($_FILES['attach']['name'] as $f => $name) { 
 
     if ($_FILES['attach']['error'][$f] == 4) { 
 
      continue; 
 
     } 
 
     
 
     if ($_FILES['attach']['error'][$f] == 0) { 
 
      if ($_FILES['attach']['size'][$f] > $max_file_size) { 
 
       $message[] = "$name is too large!."; 
 
       continue; 
 
      } 
 
      
 
      elseif (!in_array(pathinfo($name, PATHINFO_EXTENSION), $valid_formats)) { 
 
       $message[] = "$name is not a valid format"; 
 
       continue; 
 
      } 
 
      
 
      else { 
 
       if (move_uploaded_file($_FILES["attach"]["tmp_name"][$f], $path . $name)) 
 
        $count++; 
 
       
 
      } 
 
     } 
 
    } 
 
    
 
} 
 
?>

нужны обновления для exisits файлов в коде выше.

+1

Итак, каков ваш вопрос в точности? Мы не должны любить вопрос «сделай мою домашнюю работу для меня». Вы получаете какие-либо ошибки? Что работает, а что нет? Ваш фрагмент кода содержит много проверок и т. Д., Которые могут быть опущены в вашем вопросе aswelll. –

+0

использовать 'file_exists', чтобы проверить, существует ли файл или каталог – ravisachaniya

+0

, почему вы используете переименование ... пожалуйста, время, как вещь, не перезаписывающая оригинальную. – madankundu

ответ

0

Попробуйте это:

before moving the file to server put this check 

$fname = $_FILES['attach']['name']; 
if(file_exist($path)) 
{ 
    $file = explode($fname); // explode file name and extension 

    $rand = rand(1, 100); 
    $fname = $file[0].'.'.$rand.$file[1]; // combine file name with some random value with extension 
} 

// Now fname will contain the original name or modifed name in it 
// You can maintain a counter instead of random value that gives you 1,2,3 ... 
0

Вы можете попробовать заменить

else{ 
    if(move_uploaded_file($_FILES["attach"]["tmp_name"][$f], $path.$name)) 
    $count++; 

} 

с

else { 

    $targetfile = $path . $name; 

    if(file_exists($targetfile)){ 

     /* get filename & extension from target file */ 
     $filename=pathinfo($targetfile, PATHINFO_FILENAME); 
     $extension=pathinfo($targetfile, PATHINFO_EXTENSION); 

     /* if the last character of the file's name is a digit, increment by one */ 
     $lastchar = intval(substr($filename, strlen($filename)-1)); 

     if($lastchar && !is_nan($lastchar)) { 
      /* Get the actual integer value from the end of the filename */ 
      preg_match('@\[email protected]', $filename, $matches); 
      if(!empty($matches)) $lastchar=$matches[0]; 

      /* Remove original number and replace with new incremented value */ 
      $filename = substr($filename, 0, strlen($filename) - strlen($lastchar)) . ($lastchar + 1); 

     } else { 
      /* last character was not a digit, add '1' to filename */ 
      $filename.='1'; 
     } 

     /* determine new file's path */ 
     $targetfile = $path . $filename . '.' . $extension; 

     clearstatcache(); 
    } 

    if(move_uploaded_file($_FILES["attach"]["tmp_name"][$f], $targetfile)) $count++; 
} 

Он должен определить, существует ли уже файл в указанной целевой папке - если он делает и имеет целое число в качестве последней части для его имени, оно должно увеличивать это значение на единицу и создавать новый f ilename. Если целого нет, он должен просто добавить '1', но если файл не существует, он будет использовать исходное имя.

Смежные вопросы