У меня есть форма обсуждения отправки с загрузкой изображения на моем сайте. Теперь я хочу загрузить уникальное имя файла, когда пользователь отправит свое изображение, чтобы я мог показать результат всех изображений и избежать дублирования имени файла. Как это сделать с помощью 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, если вы не хотите, чтобы пользователь должен был ждать, пока форма не была отправлена, чтобы получить сообщение об ошибке или вызвать изменение имени файла.