Не работает переименование одинаковых файлов

Была написана функция, которая бы переименовывала одинаковый файл в папке, если он уже существует. Однако, если в папке имеется файл с таким названием, то не создается его дубликат по типу - file_1.jpg, file_2.jpg итд

Дебагом путь оказывается верным, но название файла остается прежним и не создается копия

В чем может быть проблема?

        $f_path = "/img/cats/";
        $preview = basename($_FILES["preview"]["name"]);
        $previewFile = $f_path . $preview;
        
        $previewNew = pathinfo($preview, PATHINFO_FILENAME);
        $extension =  pathinfo($preview, PATHINFO_EXTENSION);
        $counter = 0;
        while (file_exists($previewFile)) {
            $counter++;
            $previewFile = $f_path . $previewNew . "_" . $counter . "." . $extension;
        }

        move_uploaded_file($_FILES["preview"]["tmp_name"], $previewFile);

Ответы (1 шт):

Автор решения: Jean-Claude

Скорее всего запутался в переменных, давай им осмысленные названия, чтобы за пол секунды по одному только названию было понятно что конкретно находится в переменной.

Такой код работает:

//константа с путем к корню скрипта
const ROOT_DIR = __DIR__;

if (isset($_FILES['file'])) {

    $filename = basename($_FILES["file"]["name"]);
    $filename_with_path = ROOT_DIR . '/' . $filename;

    $name = pathinfo($filename, PATHINFO_FILENAME);
    $extension = pathinfo($filename, PATHINFO_EXTENSION);

    $counter = 0;
    while (file_exists($filename_with_path)) {
        $counter++;
        $filename_with_path = ROOT_DIR . '/' . $name . "_" . $counter . "." . $extension;
    }

    move_uploaded_file($_FILES["file"]["tmp_name"], $filename_with_path);

}
→ Ссылка