[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Загрузка изображения
AlmazDelDiablo
Привет всем!

Собственно, вопрос скорее теоретический. Правилен ли алгоритм создания имени изображения при загрузке, а также способ проверки, нет ли уже такого имени в каталоге, дабы изображения не перезаписывались.
do {
$filename = generate(20) . strrchr($model->image->name, ".");
} while( file_exists($path.$filename) );

В общем-то, я завис на этом месте именно из-за do-while, который очень сильно ругали на этом форуме из-за неуместного его использования после курсов Попова. Однако, после знакомства с Java, этот цикл ушел из негласного запрета для использования, ибо там полноценно открылись его качества.
Так что, допустимо ли в моем случае использовать страшный и ужасный do-while?)

_____________
Блог | VK | GitHub | Twitch
Nikitian
Правильно. Но я бы добавил счёт количества итераций. Если больше 50-100, то не продолжать и вызывать админа для решения проблемы. НЕ стоит допускать даже теоретически бесконечных циклов.
dron4ik
а почему не присвоить теоретически новое имя картинке?
можно же сэкономить... или задача именно так стоит?

_____________
Ex3m.com.ua — Активный образ жизни
AlmazDelDiablo
Nikitian, спасибо за совет, добавлю.

dron4ik, я немного параноик и боюсь, а вдруг у меня генератор 20-и рандомных символов выдаст однажды повторение и перезапишет какую-нибудь картинку. Для этой маловероятной ситуации сделал цикл, который бы приписывал картинке новое имя, если сгенерированное перед этим оказалось бы занято.

_____________
Блог | VK | GitHub | Twitch
dron4ik
я использую mktime().'-'.rand(001, 999); как по мне вполне...
+ проверку, ибо есть вероятность что в одну секунду будет несколько записей и ранд сработает одинаково... тогда я добавляю еще один ранд)


Когда то делал типо $a = rand(1, 9)
if($a==1){
$s='TYfwks';
}elseif($a==2){
$s='jkghkjgk';
}...

$name .= $s;
но это лишнее)))


когда то делал не mktime() а date("YmdHis")...)))))

и файло ложу не в одну папку, а в несколько
$dir = date("Y").'/'.date("m").'/'.date("d");
dir($dir );

_____________
Ex3m.com.ua — Активный образ жизни
Nikitian
Такой способ вполне подходит и для генерации каких-нибудь хитрых но уникальных данных для пользователей. Правда в случае с базой лучше сразу генерить десяток вариаций, а потом их разом искать в базе. Что-то типа

select `uniq` from `tbl` where `uniq` in ("gen1","gen2","gen3","gen4","gen5","gen6"....)

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

dron4ik
Если использовать не только цифры, то уже не так просто. А цифр всегда меньше вариаций, чем цифр + букв.
dron4ik
$number = 10;
$arr = array('a','b','c','d','e','f',
'g','h','i','j','k','l',
'm','n','o','p','r','s',
't','u','v','x','y','z',
'A','B','C','D','E','F',
'G','H','I','J','K','L',
'M','N','O','P','R','S',
'T','U','V','X','Y','Z',
'1','2','3','4','5','6',
'7','8','9','0');
$name = "";
for($i = 0; $i < $number; $i++)
{
$index = rand(0, count($arr) - 1);
$name .= $arr[$index];
}


_____________
Ex3m.com.ua — Активный образ жизни
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.