Не работает переименование одинаковых файлов
Была написана функция, которая бы переименовывала одинаковый файл в папке, если он уже существует. Однако, если в папке имеется файл с таким названием, то не создается его дубликат по типу - 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);
}