#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. Я пытался, но в то время это мне не позволяло. Сделали это сейчас, хотя