Создайте случайное имя файла, но убедитесь, что оно еще не используется

#php #upload

Вопрос:

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

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

Пример — da4fb5c6e93e74d3df8527599fa62642.jpg amp; da4fb5c6e93e74d3df8527599fa62642.JPG

 if ($_FILES['file']['name']) {if (!$_FILES['file']['error']){
$name = md5(mt_rand(100, 200));
$ext = explode('.', $_FILES['file']['name']);
$filename = $name . '.' . $ext[1];
$destination = $_SERVER['DOCUMENT_ROOT'] . '/images/infopages/' . $filename; //change this directory
$location = $_FILES["file"]["tmp_name"];
move_uploaded_file($location, $destination);
echo '/images/infopages/' . $filename;
}else{
echo  $message = 'Ooops!  Your upload triggered the following error:  '.$_FILES['file']['error'];
}
}
 

Любая помощь будет признательна.

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

1. «…иногда (слишком часто) он создает одно и то же имя файла… » — вы подумывали о добавлении случайности в свой алгоритм? Диапазон из 100 чисел не допускает большого пространства для маневра. Вы можете использовать UUID, которые гарантируют уникальность в очень больших масштабах.

Ответ №1:

Вы можете использовать функции PHP uniqid и rand в сочетании. Таким образом, вы никогда не получите повторяющиеся значения.

 $filename = uniqid (rand(1000000,9999999), true) '.' . $ext[1];
 

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

1. Поэтому отбросьте — $name = md5(mt_rand(100, 200)); и замените $filename = $name . ‘.’ . $ext[1]; на $filename = uniqid (rand(1000000,9999999), true) ‘.’ . $ext[1];

2. Я пытался, но в то время это мне не позволяло. Сделали это сейчас, хотя