2011-12-19 4 views
7

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

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

+1

http://stackoverflow.com/questions/8551763/storing-image-data-in-mysql-and-naming-conventions/8551813#8551813 – Richard

+1

Использовать 'uniqid()' именование постоянного файла с 'move_uploaded_file() ' –

ответ

10

Вы можете использовать функцию 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) {} 
8

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

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

$filename = uniqid() . $orig_filename; 

Read this documentation on the PHP docs about uniqid for more information. Он использует дату-время для вывода уникальной строки идентификатора.

+0

Извините, не могли бы вы привести мне пример –

+0

Ну, это имя с уникальным идентификатором в базу данных, что-то вроде этого: 4eef63add36881162_03.JPG.Но в папке с изображением отображается оригинальное имя изображения, например: 1162_03.jpg, можно ли изменить имя оригинального изображения точно так же, как и имя образа базы данных? –

+0

Я исправил эту проблему. Спасибо за ваше время Баткинс. –

0

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

+0

ну, но я думаю, что есть лучший способ ... –

+0

Что значит лучший способ? Я думаю, что либо использование unique_id, как предложено в других комментариях, или имя пользователя, их файл, являются двумя лучшими способами? Если вы планируете отображать имя для клиента, то лучший способ - позволить пользователю называть свой файл дружественным именем, иначе вы будете показывать unique_id клиентам, которые могут быть неприемлемыми. – Robert

3

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

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

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

+0

+1 для «Будь предупрежден, что он будет уникальным только на одном компьютере, т. Е. Он может генерировать то же самое, если вы запускаете его в одно и то же время на двух разных машинах». –

1

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

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


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

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

Простой пример:

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

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

Смежные вопросы