Генерить уникальное имя файла в опр. каталоге

maxim2

Новичок
Генерить уникальное имя файла в опр. каталоге

Привет всем
Посмотрел по форуму что то ничего не подходит

Как генерить уникальное имя файла в определенном каталоге при загрузке картинок?

загружаю картинки так

PHP:
if (is_uploaded_file($img)) {
  move_uploaded_file($img, "./img_pages/".$img_name); 
        }
 

Фанат

oncle terrible
Команда форума
Tor, ты ошибаешься. tempnam ему не нужно.
впрочем, вариант Screjet ему тоже не подойдёт. поскольку не решает проблему, которую автору не хватило сил сформулировать, но с которой он и пришёл на форум. Бывает.

я думаю, ещё пара тыков пальцем в небо в направлении мануала - и нужная функция найдётся =)
 

Tor

Новичок
Фанат
tempnam как раз подойдет
в мануале некоторая неоднозначность
написано "Create file with unique file name", хотя ниже и на самом деле "Returns the new temporary filename"
 

Фанат

oncle terrible
Команда форума
Ему не надо создавать файл. ему надо создавать имя файла.
Посмотри на код-то.
 

Tor

Новичок
Фанат
из манула

$tmpfname = tempnam("/tmp", "FOO");
$handle = fopen($tmpfname, "w");

так что возвращает tempnam?
 

Фанат

oncle terrible
Команда форума
я ему говорю, что клиенту не надо создавать файл, а он мне в ответ - что функция возвращает.

вообще, я не знаю, как ведёт себя move_uploaded_file при попытке затереть уже существующий. Если затирает - то пользоваться можно, хотя и глупо.
 

Tor

Новичок
Фанат
я уже час пытаюсь втолковать тебе, что tempnam НЕ СОЗДАЕТ ФАЙЛ, а возвращает уникальное имя в указанной директории, что и нужно человеку

если тебе хочется верить в другое - я не могу да и не хочу тебе это запрещать - пребывай в неведении и дальше
 

maxim2

Новичок
Я чето непонимаю
$tempname=tempnam("./img_pages/", "pages");

возращает C:\WINDOWS\pag1B.tmp

что не так? мне надо в директории img_pages и расширение ставиться tmp а надо какое было у картинки
 

Silex

unitecsys
maxim2, ты можешь пояснить задачу? Ты закачиваешь картинки в определенный(е) каталог(и) и нужно, чтобы картинка закачалась с уникальным именем и не пересеклась с уже существующими? Так?
 

Silex

unitecsys
Вариант один. Сделай счетчик, храни его показания в базе или файле (лучше в файле), перед move_uploaded_file() читай его показания, увеличивай на единицу и присоединяй расширение закачанного файл. Увеличенное значение снова сохраняешь в хранилище (на забудь о проблемах совместного доступа). Плюс - "красивые" имена файлов по порядку. Можешь также задавать кол-во символов в имени файла, чтобы вообще хорогшо было, типа 000001.jpg

Вариант два. Генеришь случайную строку заданной длины, присоединяешь расширение закачанного фала. Проверяешь file_exists() существование файла в директории. Если существует - повторяешь операцию, если нет - move_uploaded_file().
 

Фанат

oncle terrible
Команда форума
Дополнение к варианту 1: можно для имён файлов воспользоваться автоинкрементным полем в БД, если такая используется.
Дополнение к варианту 2: я думаю, что автору вопроса так же требуется алгоритм генерации случайной строки =)
 

Silex

unitecsys
В варианте два можно сначала проверить оригинальное имя, а генерить случайное в случае существования аналогичного файла. Даже нужно.
 

Фанат

oncle terrible
Команда форума
Лично я так и сделал бы. а при несовпадении не генерил бы случайное, а добавлял бы цыферку.
правда, этот алгоритм теоретически будет производить файлы вида name1111, но имплементить что-то болшее (вида Новая папка (15) в виндоус), не вижу смысла
 
Сверху