Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> skracanie linków
nowy_pehapowiec
post
Post #1





Grupa: Zarejestrowani
Postów: 220
Pomógł: 0
Dołączył: 24.08.2009

Ostrzeżenie: (0%)
-----


Chciałbym napisać sobie stronę do skracania linków (podobną do Tinyurl.pl), ale nie jestem pewien algorytmu.
Weźmy taki adres:
http://adres.com/index.php?v=1111111111111...222222222222222
Tinyurl zamienia go na: http://www.tinyurl.pl?pPGv05sf, tak na prawdę na pPGv05sf bo http://www.tinyurl.pl? jest stałe w każdym zamienionym adresie.
Domyślam się, że w bazie mam tabele z dwoma kolumnami: pełny adres i skrócony adres. Pytanie jest jak skrócić adres, żeby skrót pozostał unikalny? md5 i sha1 są za długie. Ale połowa z md5 to właśnie 8 czyli tyle ile jest w Tinyurl. Czy wystarczy wygenerować dla adresu sumę md5 i wybrać z niej pierwszą połowę znaków? Co jeśli połowy sum dwóch różnych adresów będą takie same? Sprawdzać w tabeli i ewentualnie dodawać kolejne znaki z sumy? Czy warto się pokusić na jeszcze krótsze adresy np 6pierwszych znaków z md5? Może lepiej użyć fragmentu sha1 albo innego rozwiązania?
I jeszcze kwestia przekierowania. User podaje adres:
http://www.tinyurl.pl?pPGv05sf skrypcik pobiera z bazy pełny url. I trzeba go przekierować, czy header() wystarczy? Chciałbym uniknąć ostrzeżeń w przeglądarkach, że dochodzi do przekierowania. Zależy mi tez na wydajności.

Czy to będzie dobrze dobrze działać? Może coś trzeba poprawić?


pozdro
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
możesz sobie wygenerować losowy kod 5 znakowy

Losowy? Wraz ze wzrostem ilości rekordów będziesz miał problem z generowaniem unikalnego identyfikatora, bo może się parę razy powtórzyć. (IMG:style_emoticons/default/winksmiley.jpg)

Co do praktycznego rozwiązania - BIGINT na ID, i aby nie były to długie liczby do przekazania w URL, tworzymy własny system liczbowy, który będzie zawierał - oprócz cyfr - także wielkie i małe litery oraz pewne znaki specjalne, które nie ulegają zamiany na %XX w adresie. Ale jakie to znaki, to odsyłam do odpowiedniego RFC dla URI.

Liczbę-ID zamieniamy na ten system liczbowy i voila - wystarczy go przekazywać w linkach.

O systemach liczbowych napisano już całkiem sporo; jeśli chodzi o przytoczone przeze mnie rozwiązanie, to YouTube chyba korzysta z takich identyfikatorów. (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 8.10.2025 - 19:22