#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 (или что бы это ни было).