2015-09-16

Trumpųjų nuorodų tarnyba

Daugelis turbūt žino, kad egzistuoja tokie tinklalapiai, kurie leidžia iš ilgos ir nepatogios nuorodos padaryti trumpesnę (pvz. u.to , byt.ly ir t.t.).
Šiuo atveju mes pabandysime sukurti tokių nuorodų tarnybą.
Pradžioje sukuriame paprastą formą:
<form action="" method="post"> 
Įveskite nuorodą:<input type="text" name="url">
 
<button>Gauti...</button> 
</form> 

Sukuriame url laukams duomenų bazę:
id,url,url_real

Duomenų apdorojimas:
if(isset($_POST['url'])){ 
  $url_real=mysql_real_escape_string(htmlspecialchars($_POST['url']));
  if(file_get_contents($url_real)){
    do { 
       $url_random=create_url(); 
       $q=mysql_query("SELECT * FROM `url` where `url`='$url_random'"); 
    }  
    while(@mysql_num_rows($q)>0); 
    $query=mysql_query("SELECT * FROM `urls` where `url_real`='$url_real'"); 
    if(mysql_num_rows($query)==0){ 
       mysql_query("INSERT INTO `urls`(url,url_real) 
       VALUES('$url_random','$url_real')"); 
       echo 'site.ru/'.$url_random; 
    } else { 
      while($row=mysql_fetch_array($query)){ 
           $url=$row['url']; 
      } 
      echo 'http://'.$_SERVER['SERVER_ADDR'].'/'.$url; 
    }
  } else {
    echo 'blogas url';
  }
}  

Panagrinėkime kodą.

Pradžioje patikriname ar nuoroda veikianti.
Vėliau mums reikia sugeneruoti trumpąją nuorodą ir patikrinti ar jį yra duomenų bazėje:
    do { 
       $url_random=create_url(); 
       $q=mysql_query("SELECT * FROM `url` where `url`='$url_random'"); 
    }  
    while(@mysql_num_rows($q)>0); 

Atsitiktinių simbolių generacijos funkcija:
 function create_url() 
  { 
    $arr = array('a','b','c','d','e','f', 
                 'g','h','i','j','k','l', 
                 'm','n','o','p','r','s', 
                 't','u','v','w','x','y', 
                 'z','A','B','C','D','E', 
                 'G','H','I','J','K','L', 
                 'M','N','O','P','R','S', 
                 'T','U','V','W','X','Y', 
                 'Z','F','1','2','3','4', 
                 '5','6','7','8','9','0'); 
    $url = ""; 
    for($i = 0; $i < 6; $i++) 
    { 
      $random = rand(0, count($arr) - 1); 
      $url .= $arr[$random]; 
    } 
    return $url; 
  } 

Vėliau bus vykdomas nuorodos tikrinimas. Jei ji jau yra, tai išvedame trumpąją nuorodą iš duomenų bazės. O jei nėra, tai pridedame į duomenų bazę ir išvedame naują nuorodą:
    $query=mysql_query("SELECT * FROM `urls` where `url_real`='$url_real'"); 
    if(mysql_num_rows($query)==0){ 
       mysql_query("INSERT INTO `urls`(url,url_real) 
       VALUES('$url_random','$url_real')"); 
       echo 'http://'$_SERVER['SERVER_ADDR'].$url_random; 
    } else { 
      while($row=mysql_fetch_array($query)){ 
           $url=$row['url']; 
      } 
      echo 'http://'.$_SERVER['SERVER_ADDR'].'/'.$url; 
    }
  } else {
    echo 'blogas url';
  }

Beveik viskas baigta. Liko tik realizuoti trumpųjų nuorodų peradresavimą:
if(!empty($_GET['a'])){ 
  $url=mysql_real_escape_string($_GET['a']); 
  $query=mysql_query("SELECT * FROM `urls` where `url`='$url'"); 
  if(mysql_num_rows($query)==1){ 
    while($row=mysql_fetch_array($query)){ 
      $url_real=$row['url_real']; 
    } 
    header("location: ".$url_real); 
  } else { 
    header("location: http://".$_SERVER['SERVER_ADDR']); 
  } 
} 

Trumpųjų nuorodų tarnyba baigta. Pilnas kodas atrodys taip:
<? 

include ('config.php');
   mysql_connect($sqlhost, $sqluser, $sqlpass); 
   mysql_query("SET NAMES `CP1251`") or die (mysql_error()); 
   mysql_select_db($sqldb); 
    
if(!empty($_GET['a'])){ 
  $url=mysql_real_escape_string($_GET['a']); 
  $query=mysql_query("SELECT * FROM `urls` where `url`='$url'"); 
  if(mysql_num_rows($query)==1){ 
    while($row=mysql_fetch_array($query)){ 
      $url_real=$row['url_real']; 
    } 
    header("location: ".$url_real); 
  } else { 
    header("location: http://".$_SERVER['SERVER_ADDR']); 
  } 
} 
?> 
<form action="" method="post"> 
Url:<input type="text" name="url">
 
<button>ok</button> 
</form> 
<? 
  function create_url() 
  { 
    $arr = array('a','b','c','d','e','f', 
                 'g','h','i','j','k','l', 
                 'm','n','o','p','r','s', 
                 't','u','v','w','x','y', 
                 'z','A','B','C','D','E', 
                 'G','H','I','J','K','L', 
                 'M','N','O','P','R','S', 
                 'T','U','V','W','X','Y', 
                 'Z','F','1','2','3','4', 
                 '5','6','7','8','9','0'); 
    $url = ""; 
    for($i = 0; $i < 6; $i++) 
    { 
      $random = rand(0, count($arr) - 1); 
      $url .= $arr[$random]; 
    } 
    return $url; 
  } 
if(isset($_POST['url'])){ 
  $url_real=mysql_real_escape_string(htmlspecialchars($_POST['url']));
  if(file_get_contents($url_real)){
    do { 
       $url_random=create_url(); 
       $q=mysql_query("SELECT * FROM `url` where `url`='$url_random'"); 
    }  
    while(@mysql_num_rows($q)>0); 
    $query=mysql_query("SELECT * FROM `urls` where `url_real`='$url_real'"); 
    if(mysql_num_rows($query)==0){ 
       mysql_query("INSERT INTO `urls`(url,url_real) 
       VALUES('$url_random','$url_real')"); 
       echo 'http://'$_SERVER['SERVER_ADDR'].$url_random; 
    } else { 
      while($row=mysql_fetch_array($query)){ 
           $url=$row['url']; 
      } 
      echo 'http://'.$_SERVER['SERVER_ADDR'].'/'.$url; 
    }
  } else {
    echo 'blogas url';
  }
}  
?>

Pasiremta: habrahabr.ru

Komentarų nėra:

Rašyti komentarą