Переименовать файл, если он уже существует -загрузка файла php

#php #file-upload #file-exists

#php #файл-загрузка #файл-существует

Вопрос:

я хочу переименовать загруженный файл, если он уже существует. я хочу переименовать его в 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  ;
                
            }
        }
    }
    
}
?>  

требуется некоторое обновление для существующих файлов в приведенном выше коде.

Комментарии:

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

2. используется file_exists для проверки, существует ли файл или каталог

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

4. @ Damien Overeem я пробовал все, как я could…am не прошу делать мою домашнюю работу

Ответ №1:

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

 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 ...
  

Ответ №2:

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

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

}
  

с

 else {

    $targetfile = $path . $name;

    if( file_exists( $targetfile ) ){

        /* get filename amp; 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 amp;amp; !is_nan( $lastchar ) ) {
            /* Get the actual integer value from the end of the filename */
            preg_match( '@d $@', $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  ;
}
  

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