в Web

Создаем сервис коротких ссылок

Вероятно Вы уже знакомы с сервисом коротких ссылок tinyurl.com. Давайте создадим свой собственный сервис коротких ссылок.

Как работает сервис коротких ссылок

Например Вы залили файл на narod.ru/disk и получили ссылку вида http://narod.ru/disk/9036797010/somefile.html. Запомнить ее будет затруднительно, а записывать долго для этого и существуют сервисы коротких ссылок. Вы заходите на tinyurl.com, копируете в специальную форму ссылку и получаете короткую ссылку вида http://tinyurl.com/8fp ее и запомнить, и записать намного быстрее.

Приступим

Для этого нам понадобится:

  • PHP
  • MySQL
  • mod_rewrite

Для начала создадим новую базу данных, назвав ее url (для этого можете воспользоваться phpmyadmin). Теперь приступим к созданию таблицы. Назовем ее short_urls.

CREATE TABLE `short_urls` (
`id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`short` VARCHAR( 6 ) NOT NULL ,
`url` VARCHAR( 1000 ) NOT NULL ,
`stamped` DATETIME NOT NULL
) ENGINE = MYISAM ;

Первый столбец будет идентификатором. В столбце short будет храниться короткая часть ссылки (будет генерироваться ссылка вида http://yoursite.ru/xxxxxx, где xxxxxx короткая часть ссылки, xxxxxx будет состоять из цифр и букв это даст нам 2176782336 комбинаций). В столбце url будет храниться «укорачиваемая» ссылка. Последний столбец будет содержать в себе даты добавления ссылок.

Теперь создадим html шаблон сервиса. Создайте файл index.php и скопируйте в него следующий код

<form id="shorten_form" name="shorten_form" method="post" action="shorten.php">
  <input type="text" name="url" id="url" />
  <input type="submit" name="submit" id="submit" value="укоротить" />
</form>

Пришло время для php. Создайе файл shuffle.php и вставте в него следующий код

//функция для установки соединения с базой данных
function dbconnect(){
  //HOST – адрес сервера баз данных (обычно localhost)
  //USERNAME – имя пользователя
  //PASSWORD – пароль
   $link = mysql_connect(‘HOST’, ‘USERNAME’, ‘PASSWORD’);
  //DB – имя базы данных (у меня url)
   $db_selected = mysql_select_db(‘DB’, $link);
}

//Функция для генерирования уникальной ссылки длинны $numAlpha
function generateurl($numAlpha=6)
{
   dbconnect(); //соединяемся с базой данных
   $listAlpha = ‘abcdefghijklmnopqrstuvwxyz0123456789′; //символы из которых генерируется индентификатор
   return str_shuffle(substr(str_shuffle($listAlpha),0,$numAlpha)); //генерируем индентификатор и возвращаем
}

//функция для «укорачивания» ссылок
function geturl($in)
{
   dbconnect(); //соединяемся с базой

  //генерируем индентификатор и проверяем его уникальность
   do{
     $out = generateurl();
     $query = "SELECT short  FROM `short_urls` WHERE `short` = ‘$out’";
         $result = mysql_query($query);
   } while (mysql_num_rows > 0);

//добавляем данные в базу данных
   $insert_query = "INSERT INTO `short_urls` (`id`, `short`, `url`, `stamped`) VALUES (NULL, ‘$out’, ‘$in’, NOW());";
   $result = mysql_query($insert_query);

   return "http://yoursite.ru/".$out; //генерируем и возвращаем короткую ссылку
}

Последняя функция проверяет присутствует ли сгенерированый индентификатор в таблице, если присутствует, то генерируется новый, пока не сгенерируется уникальный индентификатор, затем генерируется ссылка.

Теперь соберем все вместе. Создайте файл forward.php и вставте в него следующий код

include ‘shuffle.php’;

$i = $_SERVER[‘QUERY_STRING’];
 //проверяем формат индентификатора
if (preg_match("/^[0-9a-z]{6}$/", $i)) {
    dbconnect(); //соединяемся с базой

    $result = mysql_query("SELECT short, url FROM `short_urls` WHERE `short` = ‘$i’") or die(mysql_error());
 //проверка на наличие индентификатора в базе данных
    if (mysql_num_rows($result) < 1) {
        header("Location: http://yoursite.ru");
        exit;
    }else
        {
            $row = mysql_fetch_row($result);
            header("Location: ".$row[1]); //переадресация по хранимому адресу
        }
}
else
{
   header("Location: http://yoursite.ru");
}

В файл .htaccess вставте

XBitHack      Off
RewriteEngine On
RewriteCond   %{REQUEST_URI} \/([0-9a-z]{4})$ [NC]
RewriteRule   ^(.*) http://www.yoursite.ru/forward.php?%1 [L]

Теперь создайте файл shorten.php и вставте в него следующий код:

<?php include `shuffle.php`; ?>
<p align="center">Ваша ссылка:
<p align="center"><?php echo $_POST[‘url’]; ?>
<p align="center">Была уменьшена до:
<p align="center"><?php echo geturl($_POST[‘url’]); ?>

shorten.php будет отображать короткую ссылку

Сервис коротких ссылок готов. Как Вы уже заметили в этом нет ничего сложного. Если возникли трудности, задавайте свои вопросы в комментариях

Обсуждение2 Comments

  1. Иван:

    Статья класс! То что искал

  2. Dream-x:

    хех я вот хотел написать подобное только искал алгоритмы хеширования, или что-нибудь в этом роде, а ты простым shuffle все сделал.. молоток 8)

Добавить комментарий