@del993788

Как переименовать файл, если такой файл есть при загрузке?

Здравствуйте. Загружаю файл и проверяю, есть ли такой файл:

$filename = "upload/".$_FILES["filename"]["name"];
   	if (file_exists($filename)) {
    echo "Файл $filename существует";
move_uploaded_file($_FILES["filename"]["tmp_name"], "upload/".$_FILES["filename"]["name"]);
}

Подскажите, как дописать хоть куда-нибудь в название файла «+1»?
Чтобы, если файл называется good.jpg — закачался бы файл 1good.jpg или good1.jpg
Если файл 1good.jpg есть — закачался бы файл 2good.jpg и т.д.
То есть, чтобы работало по принципу «новая папка 1», «новая папка 2»
  • Вопрос задан
  • 302 просмотра
Пригласить эксперта
Ответы на вопрос 2
RomaZveR
@RomaZveR
CEO AlertMoney, PHP/Golang Developer
Это совершенно небезопасный и непонятно зачем нужный велосипед. Генерируйте наименования загружаемых файлов сами, строго следите за расширением.

$valid_formats = [
    'jpg',
    'jpeg',
    'png',
    'gif',
    'bmp'
];

$ext = pathinfo($_FILES['filename']['name'], PATHINFO_EXTENSION);
if (!isset($valid_formats[$ext])) {
   return 'error';
}

$filename = md5($_FILES['filename']['name'].uniqid()). '.' .$ext;

if (!is_file('upload/'.$filename)) {
   move_uploaded_file($_FILES['filename']['tmp_name'], 'upload/'.$filename);
}
Ответ написан
Комментировать
1) Получить название файла
2) Записать в переменную, отбросив расширение ".jpg", только делайте внимательно, чтобы отбрасывало именно разрешение, а не так, чтобы у вас файл kartinka.leto.bmp и вы отбросили .leto.bmp
3) Если приписанного числа нет, то добавить в конце 1, если изначально file1.bmp, то отрезать единицу (или любое другое число), прибавить к ней +1 и подписать обратно
4) Приклеить обратно расширение
5) ...
6) PROFIT!
P>S> В 3 пункте, добавляйте через _1, чтобы проще было улавливать разницу между названием файла и его копией, чтобы получалось file.bmp file1.bmp, file_1.bmp file1_1.bmp чтобы видеть разницу между ними
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы