Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> укорачивание урлов (2 вопроса) 
:(
    Опции темы
getme
Дата 21.8.2009, 23:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 12.9.2008

Репутация: -2
Всего: -2



делаю небольшой сайт, вотзникло несколько вопросов по оптимизации
нужно сгенерить случайную сторку для записи в БД, сделал вот так

Код

protected function genUrlKey($length = 5)
    {
      $key    = '';
      $token    = '0123456789bcdfghjkmnpqrstvwxyzAGKLMNOQPZYH'; 
      
      $i = 0;
      while ($i < $length) 
      { 
        $char = substr($token, mt_rand(0, strlen($token)-1), 1);
        
        if ( !stristr($key, $char)) 
        { 
          $key .= $char;
          $i++;
        }
      }
      
    $conn    = Zend_Db_Table::getDefaultAdapter();
    $whereTable    = $conn->select()->from('clips', array('COUNT(*)'));    
    $whereTable->where('clip_key = ?', $key);
    $nb        = $conn->fetchOne($whereTable);
        
    if($nb > 0 )
    {
       $key .= $nb+1; 
    }
        
      return $key;
    }


вообщем генерится случ. строка, далее проверятся есть ли она в БД, если до то добавляем к ключю кол-во существующих записей +1, таким образом ключ становится уникальным. 

мне интересно оптимален ли данный подход?
минусы которые я вижу, строка становится на N-символов длинее но это не критично
есть ли другие более оптимальные варианты?

еще видел вариант рекурсией, т.е генерация нового ключа и опять проверка в БД (ну это имхо полный бред)

PM MAIL   Вверх
Ипатьев
Дата 22.8.2009, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Непонятно, в чем вопрос. Каков критерий "оптимальности"? И при чем здесь "оптимизация"?
Цитата(getme @  21.8.2009,  23:39 Найти цитируемый пост)
еще видел вариант рекурсией, т.е генерация нового ключа и опять проверка в БД (ну это имхо полный бред)

во-первых, не надо называть цикл рекурсией.
во-вторых, непонятно, с какой стати бред. 
PM MAIL   Вверх
baldina
Дата 22.8.2009, 01:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 26
Всего: 101



велосипед изобретаем?
http://us2.php.net/uniqid

а еще в таблице можно завести поле autoincrement (а может есть уже), его значение уникально в рамках таблицы. если хочется иметь крокозябры "для защищенности", его можно использовать как префикс в uniqid()
PM MAIL   Вверх
getme
Дата 22.8.2009, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 12.9.2008

Репутация: -2
Всего: -2



ладно, болтать мне с вами некогда, вижу ничего нового, к тому что есть вы не добавите

Всем спасибо.
PM MAIL   Вверх
bars80080
Дата 22.8.2009, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



ну, каков вопрос, таков ответ
PM MAIL WWW   Вверх
SneG0K
Дата 22.8.2009, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 7
Всего: 54



getme, а что это за фигня? о_О Значения, проверки какие-то. Так многа букав, чтобы придумать уникальную строку.

Код

md5(rand(0, time()).time(), $token);


Уникальнее некуда. 
PM WWW Skype   Вверх
Ипатьев
Дата 22.8.2009, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



md5 длинное слишком, на короткий урл не потянет. 

а добавить можно было бы, если бы была тема сформулирована четко.
к примеру, для многих случаев подойдет банальное xor
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0948 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.