Сервис коротких ссылок

21 Сен
2011

Здравствуйте уважаемые пользователи блога!
Многие пользователи знают что есть сайты для создание коротких ссылок(u.to\byt.ly т.д.).
Сейчас мы попробуем реализовать такой сервис.

Для начало создадим простую форму:
<form action="" method="post"> 
Введите ссылку:<input type="text" name="url">
 
<button>получить</button> 
</form> 

Создадим Базу Данных urls с полями:
id,url,url_real

Обработка данных выглядит так:
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 'неверный url';
  }
} 

Разберем код по порядку..
Сначало мы проверяем ссылку на валидность.
Потом, нам нужно сгенерировать ссылку и проверить имеется ли она в базе данных:
    do { 
       $url_random=create_url(); 
       $q=mysql_query("SELECT * FROM `url` where `url`='$url_random'"); 
    }  
    while(@mysql_num_rows($q)>0); 

Функция генерации случайных символов:
  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; 
  } 

Следующим действием будет проверка на наличии ссылки, если она уже есть, то выведем короткую
ссылку из базы данных, если нет, то добавим в базу данных и выведем новую ссылку:
    $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 'неверный url';
  }

Почти всё готово, осталось реализовать переадресацию кототких ссылок:
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']); 
  } 
} 

Сервис готов, можно доработать на свой вкус.
Весь код будет такой:
<? 

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 'неверный url';
  }
}  
?>
По материалам Хабрахабр.



загрузка...

Комментарии:

Наверх