Din egen lenkeforkorter

korturl

Det er fryktelig mange artikler å lese der ute, og noen vil man gjerne dele med andre. Vi har tjenester som Facebook og Twitter for akkurat det formålet. Men de har en svakhet. De tillater ikke ubegrenset lengde på tekst.

Ta følgende lenke:

http://www.amazon.com/gp/product/0672326957/qid=1141919181/sr=1-5/ref=sr_1_5/002-1167650-7759235?s=books&v=glance&n=283155

Den består av hele 123 tegn. Twitter tillater maksimalt 140. Vanskelig å skrive beskrivelse om lenken på resterende 17 tegn. Da forkorter man lenken. Hvordan?

Det fins mange tjenester der ute som gjør dette, http://tinyurl.com/ er bare én av dem.

Resultatet blir da http://tinyurl.com/dkt83o som bare er 26 tegn. Suksess!

tinyurl sin måte å gjøre det på
tinyurl sin måte å gjøre det på

Men jeg ville ha min egen! Så jeg bruker phpapache.

Rekkefølgen her spiller ikke så stor rolle, men la oss begynne med en tom mappe hvor man har tjenesten sin, eksempelvis /lnk/ som jeg bruker.

Steg #1

Opprett en .htaccess-fil i katalogen, og sett følgende i den:

RewriteEngine On
RewriteRule . index.php

Steg #2

Flott, nå blir alt som kommer etter /lnk/ sendt rett til index.php. Opprett index.php i /lnk/-mappa.

Vi trenger en funksjon som lager tilfeldige tegn. Det er fort gjort. Her er en super-enkel passordgenerator, og vi setter grense på 3 tegn.

  1. function Random_Password( $length ) {
  2. $possible_characters = «abcdefghijkmnopqrstuvwxyz234567890»;
  3. $string = «»;
  4. while( strlen( $string ) < $length ) {
  5. $string .= substr( $possible_characters, rand() % ( strlen( $possible_characters ) ), 1 );
  6. }
  7. return( $string );
  8. }

Steg #3

Nå trenger vi bare en funksjon for å lage lenken. Jeg har valgt min lille metode for dette, og legge til i database.

  1. $url = $_SERVER[‘REDIRECT_URL’];
  2. $uri = $_SERVER[‘REQUEST_URI’];
  3. # create.php finnes ikke fysisk, bare et pseudonavn
  4. if( $url == «/lnk/create.php» ) {
  5. $linkurl = $_GET[‘linkurl’];

  6. # Setter en grense på 3 tegn
  7. $shortcut = Random_Password( 3 );

  8. # Sjekker om snarveien er brukt, og lag ny kode dersom opptatt
  9. # Sjekk at katalogen «store» finnes, eller lag din egen
  10. while( file_exists( «store/$shortcut« ) ){
  11. $shortcut = Random_Password( 3 );
  12. }

  13. # Skriver adressen til fila
  14. file_put_contents( «store/$shortcut«,$linkurl );

  15. # Hasher url til bruk i database
  16. $hash = md5( $linkurl );

  17. # Koble til databasen
  18. $conn = mysql_connect( ‘localhost’, ‘brukernavn’, ‘passord’ );
  19. mysql_select_db( ‘databasenavn’, $conn );
  20. $url = mysql_real_escape_string( $linkurl );

  21. # Setter inn i database, denne må opprettes på forhånd
  22. mysql_query( «INSERT INTO forkortet( hash, address, added ) VALUES( ‘$hash‘, ‘$url‘, NOW() )» );
  23. mysql_close( $conn );

  24. # Vis den nye lenken
  25. print( «http://dittdomene.noe/lnk/$shortcut« );
  26. }

Sånn, da er funksjonaliteten i bunn. Men ikke veldig brukervennlig, akkurat.

Steg #4

Da legger vi til et forenklet grensesnitt som kommer dersom vi går direkte til /lnk/.

  1. # Legger til grafisk grensesnitt for å lage kort lenke
  2. } elseif( $uri == «/lnk/» ) {
  3. echo «<h1>Oh hai!</h1>
  4. <form method=get action=create.php>
  5. <label>URL: <input type=text name=linkurl size=50>
  6. <input type=submit value=Go!>
  7. </form><br/>&nbsp;</br>
  8. Legg til bookmarklet: <a href=javascript:\$base = ‘http://dittdomene.noe/lnk/create.php?linkurl=’;\$encoded = escape(location.href);location.href = \$base + \$encoded;>Forkort</a>
  9. <span style=color: grey;>(Dra opp til quickbar)
  10. «;
  11. }

Da kan vi lage og lagre lange lenker, til og med med en bookmarklet 🙂

Men dette er ikke så nyttig i seg selv. Vi vil jo faktisk bruke det!

Steg #5

  1. # Gjøre nytte av det hele
  2. } else {
  3. # Hent den korte adressen vi vil ha tak i
  4. $exploded = explode( «/»,$url );
  5. $key = $exploded[2];
  6. # Sjekke om denne korte adressen faktisk eksisterer
  7. if( file_exists( «store/$key« ) ) {
  8. # Hente adressen i fila
  9. $destination = trim( file_get_contents( «store/$key« ) );
  10. # Lage hash om man vil oppdatere databasen
  11. $thehash = md5( $destination );
  12. # Koble til databasen
  13. $conn = mysql_connect( ‘localhost’, ‘brukernavn’, ‘passord’ );
  14. mysql_select_db( ‘databasenavn’, $conn );
  15. # Oppdatere databasen med et klikk
  16. mysql_query( «UPDATE shortlinks SET clicks=clicks+1 WHERE hash=’$thehash‘» );
  17. mysql_close( $conn );
  18. # Og sende avgårde til korrekt url
  19. header( «Location: $destination« );
  20. # Hvis den korte adressen ikke finnes, si fra om det.
  21. } else {
  22. print( «<h1>Feil!</h1>Ingen treff, gitt!<br/><a href=’http://dittdomene.no’>Dittdomene.no</a>» );
  23. }
  24. }

That’s it! Bare erstatte dittdomene.no og login-detaljer med ditt eget, så har du en tjeneste som fungerer flott. Du trenger ikke database for noe av dette, men greit om du vil ha en oversikt over det i etterkant.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *