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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Короткий URL 
V
    Опции темы
Gold Dragon
Дата 30.7.2013, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



Есть длинная ссылка типа 
_http://joostina-cms.ru/index.php?option=com_boss&task=show_content&contentid=31&catid=1&directory=5

Есть механизм ЧПУ, который сделает что-то такое
_http://mysite.ru/article/content/5/31/1.html

Но иногда когда статей очень много и хочется получить короткую ссылку, типа
_http://mysite.ru/jHyeg.html

Вопрос как это сделать? 

Самый простой способ, это просто генерить ссылки и заносить в базу.. Но проблемка в том что если в генерации ЧПУ есть правило и если таблица ссылок теряется, то пр преобразовании ссылки всегда будут одинаковыми, т.е. формируются по правилу..

Со случайными такого не получится, если очистить таблицу то ссылки будут уже другими.. Вот хочется придумать какое-то правило.. Помогите.. 

PS
можно конечно md5? но они уж точно не короткие будут smile


Это сообщение отредактировал(а) Gold Dragon - 30.7.2013, 16:12


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
krundetz
Дата 30.7.2013, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 20
Всего: 69



Цитата(Gold Dragon @  30.7.2013,  16:10 Найти цитируемый пост)
можно конечно md5? но они уж точно не короткие будут

создай собственную функцию хеширования, или используй другую


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
Gold Dragon
Дата 30.7.2013, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



Цитата(krundetz @  30.7.2013,  17:49 Найти цитируемый пост)
или используй другую 
например? чтобы получился "коротки" адрес, да и коллизии не было smile

Я вот думаю чтобы что-то такое битовое придумать по типу архиваторов, но знаний не хватает видимо



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Arantir
Дата 31.7.2013, 00:27 (ссылка) |    (голосов:7) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


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

Репутация: 16
Всего: 55



Цитата(Gold Dragon @  30.7.2013,  15:10 Найти цитируемый пост)
/article/content/5/31/1

Цитата(Gold Dragon @  30.7.2013,  15:10 Найти цитируемый пост)
 очень много 

Цитата(Gold Dragon @  30.7.2013,  15:10 Найти цитируемый пост)
и хочется ... типа

Цитата(Gold Dragon @  30.7.2013,  15:10 Найти цитируемый пост)
jHyeg

Цитата(Gold Dragon @  30.7.2013,  19:11 Найти цитируемый пост)
да и коллизии не было

епт, это ж невозможно...
Нельзя [A,B] взаимно однозначно соотнести с [C,D,E]. Или что лишнее. Или что-то одно соотнесется к нескольким.

Другое дело, что не все символы там обязательны для того, чтобы дать серверу понять, чего вам надо...
Цитата(Gold Dragon @  30.7.2013,  15:10 Найти цитируемый пост)
то пр преобразовании ссылки всегда будут одинаковыми, т.е. формируются по правилу..

Цитата(Gold Dragon @  30.7.2013,  15:10 Найти цитируемый пост)
/article/content/5/31/1

Код

/a/c/5/31/1
/ac/5/31/1
/ac/5/31/1
/ac/5/1f/1
/R/5/1f/1

В зависимости от ограничений того, что стоит на месте 5, 31 и 1 можно еще больше запаковать. Например:
Код

/R500u01

где R - сокращение для /article/content/
дальше числа 62-ичной системе счисления (описываются символами 0-9a-zA-Z)
5 - число от 0 до Z (0-9a-zA-Z), одна позиция - 62 варианта
00u - число от 000 до ZZZ, 3 позиции - 238328 вариантов
01 - число от 00 до ZZ, 2 позиции - 3844 вариантов

На строне сервера парсится абсолютно однозначно и так же, как если бы по /article/content/5/31/1, вытягиваются данные из базы, только с небольшой предобработкой параметров.

Это сообщение отредактировал(а) Arantir - 31.7.2013, 00:34


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
Gold Dragon
Дата 31.7.2013, 06:11 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



Arantir, что-то ты наговорил много, я половина не понял...

Вот смотри самый простой способ. Для ЧПУ однозначно используется таблица ссылок по типу
URL-ссылка -> ЧПУ-ссылка
, т.е. оригинальная -> преобразованная

Как работает ЧПУ.. При формировании контента все ссылки по определённому правилу преобразуются в ЧПУ-ссылки. Записываются в таблицу. заодно проверяются дубликаты: или они по правилу исправляются автоматически или записываются в отдельную таблицу для ручной правки.

А вот самый простой способ создания "коротких" ссылок - это также заносить ссылки в таблицу и получать идентификатор записи.. Т.е. получаются
_http://mysite.ru/1.html
_http://mysite.ru/2.html
_http://mysite.ru/....html
_http://mysite.ru/777.html
не нравятся цифры, можно заменить буквами
_http://mysite.ru/a.html
_http://mysite.ru/b.html
_http://mysite.ru/....html
_http://mysite.ru/afs.html

Но это всё случайно.. а мне нужно правило... Ну например если в адресе
встречается ..com.. то преобразуется в  ...c...
встречается ..abc.. то преобразуется в  ...A...
встречается ..info.. то преобразуется в  ...I...

Вот и нужен механизм сокращения адреса



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
krundetz
Дата 31.7.2013, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 20
Всего: 69



Цитата(Arantir @  31.7.2013,  00:27 Найти цитируемый пост)
Нельзя [A,B] взаимно однозначно соотнести с [C,D,E].

коллизии однозначно будут, но их можно будет обойти




--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
Arantir
Дата 1.8.2013, 03:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


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

Репутация: 16
Всего: 55



Цитата(Gold Dragon @  31.7.2013,  05:11 Найти цитируемый пост)
Arantir, что-то ты наговорил много, я половина не понял...

...

Сколько у тебя вариантов вроде "/article/content/"? Вероятно, не так уж много. Всего несколько. Под которыми может быть много разных страниц. Под остальными же не так уж много страниц, чтобы они послужили поводом для этой темы.
Поскольку их немного, то можно их сократить до одного или двух символов. Например, "/article/content/" соотнести с буквой "a". И хранить это в БД. Но получится всего несколько строк, а не тысячи/миллионы, как если хранить строки для всей ссылки целиком. Можно даже в htaccess эти пару строк прописать, вообще без БД.

Большие числа всегда можно упаковать в какую-то k-ичную систему счисления с большим k. Например, записывать с помощью цифр и латинских букв обоих регистров. Таким образом в трехзначное число влезут 4-х, 5-и и некоторые 6-значные десятичные числа. А в 4 символа даже некоторые 8-значные. 

Если заранее известна длина параметров, то и слэши не нужны. программа сможет и без них порезать строку на нужные части.
Итого вполне можно спаковать /article/content/5/31/1 во что-то типа /r500u01 или /r50u1, если числа не могут быть очень большими. И это не то что однозначно, а даже обратно конвертируемо в /article/content/5/31/1.

Не знаю как вообще можно проще объяснить... Шаблонные строки пакуешь в пару символов. Большие числа пакуешь в систему счисления с более компактной записью.

Цитата(krundetz @  30.7.2013,  15:49 Найти цитируемый пост)
собственную функцию хеширования

Это вполне можно так и назвать... Если так понятнее...

В зависимости от конкретных свойств параметров в ссылке возможно сократить длину еще больше.

Это сообщение отредактировал(а) Arantir - 1.8.2013, 03:36


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
Gold Dragon
Дата 1.8.2013, 07:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



Arantir, где-то мысль уже бродит моя, никак не могу её привести в код smile Но уже где-то на правильном пути.. Да, та прав , нужно использовать несколько подходов к адресу...

Цитата

Сколько у тебя вариантов вроде "/article/content/"
Сколько угодно.. Это движок, так что компонентов может быть сколько угодно и какие угодно.. Да и при стандартном наборе их придостаточно smile
В этом же и суть, мы не знаем какие будут адреса


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Sanchezzz
Дата 1.8.2013, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 41
Всего: 60



Я понимаю что вы хотите запаковывать url перебирая сжимая слова по хитрому алгоритму, хранить то будите в базе?
А что если запаковывать не UTL а AI в таблице?

Не которые, не заморачиваются а генерируют рандомное слово из 6  символов.

Это сообщение отредактировал(а) Sanchezzz - 1.8.2013, 12:29


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
Gold Dragon
Дата 1.8.2013, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



Цитата(Sanchezzz @  1.8.2013,  13:23 Найти цитируемый пост)
 хранить то будите в базе?
ну конечно..

Цитата(Sanchezzz @  1.8.2013,  13:23 Найти цитируемый пост)
А что если запаковывать не UTL а AI в таблице?
это что такое?

Цитата(Sanchezzz @  1.8.2013,  13:23 Найти цитируемый пост)
Не которые, не заморачиваются а генерируют рандомное слово из 6  символов.
так это не проблема smile если таблицу очистить и заново сгенерить "короткие" ссылки, то они конечно не совпадут. И если кто-то на другом сайте сделал ссылку на конкретный материал, то конечно по ней уже не попасть куда нужно smile Да и генерить не нужно, тостаточно идентификатор использовать



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Sanchezzz
Дата 1.8.2013, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 41
Всего: 60



AI он же A_I -  Авто инкремент в таблице. 
Цитата
 очистить и заново сгенерить 
 А вот этого делать не стоит=)





--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
Gold Dragon
Дата 1.8.2013, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



Цитата(Sanchezzz @  1.8.2013,  13:55 Найти цитируемый пост)
А вот этого делать не стоит=)
Друзья, вопрос бы не стоял если этого "делать не стоит" smile



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Чучмек
Дата 1.8.2013, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


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

Репутация: 4
Всего: 41



Цитата(Gold Dragon @  30.7.2013,  16:10 Найти цитируемый пост)
можно конечно md5? но они уж точно не короткие будут smile

Оставь четверть символов, и будет тебе счастье. 
Вероятность коллизий увеличится многократно, конечно.
Но в реальности, если только специально не подбирать, будет не более одного или двух совпадений.
Поскольку ссылки будут хранится  в базе - проверяй на совпадение, и если совпадает - добавляй, например, [1],[2], итд.

Это сообщение отредактировал(а) Чучмек - 1.8.2013, 14:53


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
krundetz
Дата 5.8.2013, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 20
Всего: 69



Цитата(Gold Dragon @  1.8.2013,  13:18 Найти цитируемый пост)
Друзья, вопрос бы не стоял если этого "делать не стоит"

а можно беле четкое раскрытие, а то я что то не понимаю зачем заморачиваться с работоспособностью коротких урлов со сторонних ресурсов если база будет чиститься?


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
Sanchezzz
Дата 5.8.2013, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 41
Всего: 60



Код

function linkCode($id){
    $str='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $hash='';
    while($id > 0){
        $hash=$str[($id%62)] . $hash;
        $id=floor($id/62);
    }
    return $hash;
}

$arrTest = array();
for($i=1900000000; $i < 1900000020; $i++ ){
    $code = linkCode($i);
    if(isset($arrTest[$code])){
        pre('Хеш' . $code . '='.$i . ', совпадает с' .$arrTest[$code]);
    }else $arrTest[$code] = $i;
}
pre($arrTest);

Результат
Код

    [24AcNi] => 1900000000
    [24AcNj] => 1900000001
    [24AcNk] => 1900000002
    [24AcNl] => 1900000003
    [24AcNm] => 1900000004
    [24AcNn] => 1900000005
    [24AcNo] => 1900000006
    [24AcNp] => 1900000007
    [24AcNq] => 1900000008
    [24AcNr] => 1900000009
    [24AcNs] => 1900000010
    [24AcNt] => 1900000011
    [24AcNu] => 1900000012
    [24AcNv] => 1900000013
    [24AcNw] => 1900000014
    [24AcNx] => 1900000015
    [24AcNy] => 1900000016
    [24AcNz] => 1900000017
    [24AcNA] => 1900000018
    [24AcNB] => 1900000019


Функция пре это эквивалент print "<pre>"; print_r($arr);
В ходе 1м итераций совпадений не обнаружено не одного.
Чем меньше число тем меньше ссылка Рекомендую начинать с 10 по 1 символ с 62+ по 2 символа итд в геометрической прогрессии.
Число это ID в таблице 
ID(A_I)  link(URL) code(сгкнкрированный код)


И меня тоже интересует ответ на вопрос заданный krundetz

Это сообщение отредактировал(а) Sanchezzz - 5.8.2013, 10:33


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.1401 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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