PHP если значение существует в базе данных, как я могу переименовать новое значение последовательно?

#php #substring

#php #substring

Вопрос:

У меня есть поле в таблице MySQL для имен файлов, когда загружаются новые файлы, функция проверяет, существует ли это имя файла. Как я могу изменить новое имя файла, если оно существует, на что-то вроде:

filename.jpg , filename_(1).jpg, filename_(2).jpg и т. Д

Я понял большую часть того, как это сделать, просто не уверен, как заставить функцию, которая его переименовывает, знать, какое число в имени файла (если есть) и на какое следующее число его менять.

Приветствия

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

1. Круглые скобки в именах файлов могут быть обычными в Windows, но выглядят очень странно в URL-адресах (понадобятся urlencode ). Я бы посоветовал избегать их. Также могло бы упростить эту задачу.

Ответ №1:

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

 $user_id . time() . $user_provided_name . "." . $file_type
  

Ответ №2:

Если вы проверяете существование файлов с помощью file_exists() в цикле, то вы могли бы включить это, чтобы увеличить числовой суффикс:

 $filename = preg_replace('# (_(  (d )  ))?  (?=.w $) #ex',
            '"_(" . ($2 1) . ")"', $filename, 1);
  

То же самое можно выполнить с помощью функций strpos / substr. И это, вероятно, было бы меньше похоже на тарабарщину.

Ответ №3:

Вы можете использовать COUNT:

 SELECT COUNT(*) AS NumberFiles FROM Files WHERE FileName = '$filename'
  

Затем в результате вашего запроса используйте $result[0]['NumberFiles'] для переименования вашего файла.

Возможно, вы также захотите ЗАБЛОКИРОВАТЬ свою таблицу Files (или что бы это ни было).