Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Короткие url

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Toxa
Отправлено: 22 Февраля, 2013 - 11:26:02
Post Id



Посетитель


Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2008  


Помог: 8 раз(а)

[+]


Всем привет! Многие из вас, конечно, видели сайты типа bit.ly, tinyurl.com, goo.gl, которые позволяют укарачивать ссылки, с помощью уникального хеша.

Меня заинтересовало, как можно сделать подобный укорачиватель.
В интернете множество тем по данному вопросу.
http://habrahabr[dot]ru/qa/4007/

Самым популярным является вариант перевода в другую систему счисления. Вот пример, который использует flickr

Это все, конечно хорошо, но ссылки такого вида очень легко предсказуемы.
Мне же необходимо, чтобы каждая ссылка состояла из 4х символов минимум, и не имела ничего общего с предыдущей.
Как, скажем, на imgur.com

http://i[dot]imgur[dot]com/CG0pKmo[dot]gif
http://i[dot]imgur[dot]com/kGREcNZ[dot]gif

Два загруженных подряд изображения имеют совершенно разные хэши.

Подскажите, как можно такое реализовать?
Я понимаю тут нужно писать свою хэш-функцию, посоветуйте что почитать по этой теме.


-----
Удобный сервис для хранения файлов
 
 Top
NoPaper
Отправлено: 22 Февраля, 2013 - 11:28:27
Post Id



Посетитель


Покинул форум
Сообщений всего: 315
Дата рег-ции: Янв. 2012  
Откуда: Минск


Помог: 9 раз(а)




М? _http://ruseller.com/lessons.php?rub_id=37&id=1579

(Отредактировано автором: 22 Февраля, 2013 - 11:29:16)

 
 Top
Toxa
Отправлено: 22 Февраля, 2013 - 11:44:45
Post Id



Посетитель


Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2008  


Помог: 8 раз(а)

[+]


NoPaper пишет:
М? _http://ruseller.com/lessons.php?rub_id=37&id=1579

Ну здесь используется тот же алгоритм, что я указал в первом сообщении.
Читайте внимательнее, пожалуйста.

Ах да, я забыл уточнить, что встречаются и варианты с "непоследовательной" генерацией хешей. Вот тут человек предлагает хранить в базе еще и какое-нибудь случайное число и на его основе генерировать ссылку.
Но меня такой вариант не устраивает, я уверен в существовании более "чистого" решения.

По сути задача довольно проста - получить из id хеш из букв и цифр так, чтобы выполнялись 2 условия:
    - хеш должен быть уникальный для каждого id
    - зная хеш для конкретного id, нельзя было бы вычислить хеш для id+1 или id-1


-----
Удобный сервис для хранения файлов
 
 Top
OrmaJever Модератор
Отправлено: 22 Февраля, 2013 - 12:14:49
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Toxa пишет:
Два загруженных подряд изображения имеют совершенно разные хэши.

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


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Toxa
Отправлено: 22 Февраля, 2013 - 13:06:34
Post Id



Посетитель


Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2008  


Помог: 8 раз(а)

[+]


Может, конечно. Но тогда как они генерируются? Случайным образом - не реально, при больших количествах (а imgur.com - это миллионы) хэши слишком часто будут повторяться, что создаст нагрузку на сервер, я уверен, там все продумано.


-----
Удобный сервис для хранения файлов
 
 Top
Zuldek
Отправлено: 22 Февраля, 2013 - 14:01:24
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




Ну проверяйте при генерации на уникальность: повторилось 1 раз - сгенерируйте второй, либо добавляйте номер id в конечную короткую ссылкуУлыбка. насчет миллионов - короткие ссылки в основном временные, они долго не живут.

(Отредактировано автором: 22 Февраля, 2013 - 14:01:59)

 
 Top
esterio
Отправлено: 22 Февраля, 2013 - 14:03:37
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




Я бы сделал так.
Начал бы с 4 символов, если уже существует, генерируем новый, если 5 попиток не увенчались успехом, расширяем до 5 символов и с начала
 
 Top
OrmaJever Модератор
Отправлено: 22 Февраля, 2013 - 14:16:41
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Toxa пишет:
Но тогда как они генерируются? Случайным образом - не реально, при больших количествах (а imgur.com - это миллионы) хэши слишком часто будут повторяться

а это уже под вопросом. В сылке на изображения как я заметил используются символы a-zA-Z0-9 (их всего 60 если не ошибаюсь) и их количество 7 штук то количество уникальных строк будет 60 в 7 степени = 2 799 360 000 000 И поэтому можно зделать вывод что шанс повторения даже при милиарде записей в бд (1 000 000 000) будет 1/2799 что маловероятно. А даже если они и повторятся то не проблема зделать запрос в бд и сгенерировать новый.
(Добавление)
ах да, ещё если вы друг переживаете что всётаки это число можно достичь, то можно при переходе по сылке записывать время последнего перехода, и затем кроном раз в сутки удалять из бд те сылки по которым не переходили припустим месяц.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
DlTA
Отправлено: 22 Февраля, 2013 - 17:29:37
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB