php Уникальное имя файла при загрузке

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

Большое спасибо.

Вы можете использовать uniqid() для генерации уникального идентификатора

 /** * Generate a unique ID * @link http://www.php.net/manual/en/function.uniqid.php * @param prefix string[optional] <p> * Can be useful, for instance, if you generate identifiers * simultaneously on several hosts that might happen to generate the * identifier at the same microsecond. * </p> * <p> * With an empty prefix, the returned string will * be 13 characters long. If more_entropy is * true, it will be 23 characters. * </p> * @param more_entropy bool[optional] <p> * If set to true, uniqid will add additional * entropy (using the combined linear congruential generator) at the end * of the return value, which should make the results more unique. * </p> * @return string the unique identifier, as a string. */ function uniqid ($prefix = null, $more_entropy = null) {} 

Вы можете использовать временную метку в дате, таким образом вы не получите одинаковое имя файла / время дважды.

Не определен точно, как выглядит ваш код, но вы можете сделать что-то вроде этого:

 $filename = uniqid() . $orig_filename; 

Прочтите эту документацию в документах PHP о uniqid для получения дополнительной информации . Он использует дату-время для вывода уникальной строки идентификатора.

Если вам нужно уникальное имя, вы можете использовать uniqid .

 $filename = uniqid() . '.jpeg'; 

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

Лучшим вариантом IMO будет использование sha1_file. Он создаст уникальный хэш на основе содержимого файла. Это будет только сталкиваться, если это одно и то же изображение или столкновение хэшей, которое является шансом 1 в 2 ^ 160. Вы можете избежать дублирования изображений таким образом, однако, поскольку вы создаете хэш из файла, он может быть медленнее.

 $filename = sha1_file($upload_file) . $ext; 

Другой вариант – tempnam. Он создаст временный файл с уникальным именем .

Примечание. Если PHP не может создать файл в указанном параметре dir, он возвращается к системному стандарту.

Основной пример:

 $filename = tempnam($dir, $prefix); unlink($filename)//we don't need the tempfile just the name 

Также обратите внимание: если вы измените имя файла, оно может быть не уникальным.

Я думаю, что самым простым способом было бы сохранить имя изображения в поле базы данных, а затем, когда пользователь загрузит свое изображение, чтобы проверить, что имя файла уникально, проверив его против существующих имен файлов. Вы можете использовать интерфейс ajax / jquery, если вы не хотите, чтобы пользователь должен был ждать, пока форма не была отправлена, чтобы получить сообщение об ошибке или вызвать изменение имени файла.