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

Опубликовано 23-05-2009 в рубрике PHP

Метки: , ,

1

Вероятно Вы уже знакомы с сервисом коротких ссылок 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.

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

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

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

  1. <form id="shorten_form" name="shorten_form" method="post" action="shorten.php">
  2. <label>
  3. <div align="center">
  4. <input type="text" name="url" id="url" />
  5. </div>
  6.  
  7. </label>
  8. <label>
  9. <div align="center">
  10. <input type="submit" name="submit" id="submit" value="укоротить" />
  11. </div>
  12.  
  13. </label>
  14. </form>
  15.  

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

  1. //функция для установки соединения с базой данных
  2. function dbconnect(){
  3.   //HOST – адрес сервера баз данных (обычно localhost)
  4.   //USERNAME – имя пользователя
  5.   //PASSWORD – пароль
  6.    $link = mysql_connect(‘HOST’, ‘USERNAME’, ‘PASSWORD’);
  7.   //DB – имя базы данных (у меня url)
  8.    $db_selected = mysql_select_db(‘DB’, $link);
  9. }
  10.  
  11. //Функция для генерирования уникальной ссылки длинны $numAlpha
  12. function generateurl($numAlpha=6)
  13. {
  14.    dbconnect(); //соединяемся с базой данных
  15.    $listAlpha = ‘abcdefghijklmnopqrstuvwxyz0123456789′; //символы из которых генерируется индентификатор
  16.    return str_shuffle(substr(str_shuffle($listAlpha),0,$numAlpha)); //генерируем индентификатор и возвращаем
  17. }
  18.  
  19. //функция для «укорачивания» ссылок
  20. function geturl($in)
  21. {
  22.    dbconnect(); //соединяемся с базой
  23.  
  24.   //генерируем индентификатор и проверяем его уникальность
  25.    do{
  26.      $out = generateurl();
  27.      $query = "SELECT short  FROM `short_urls` WHERE `short` = ‘$out’";
  28.          $result = mysql_query($query);
  29.    } while (mysql_num_rows > 0);
  30.  
  31. //добавляем данные в базу данных
  32.    $insert_query = "INSERT INTO `short_urls` (`id`, `short`, `url`, `stamped`) VALUES (NULL, ‘$out’, ‘$in’, NOW());";
  33.    $result = mysql_query($insert_query);
  34.  
  35.    return "http://yoursite.ru/".$out; //генерируем и возвращаем короткую ссылку
  36. }

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

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

  1. include ’shuffle.php’;
  2.  
  3. $i = $_SERVER[‘QUERY_STRING’];
  4.  //проверяем формат индентификатора
  5. if (preg_match("/^[0-9a-z]{6}$/", $i)) {
  6.     dbconnect(); //соединяемся с базой
  7.  
  8.     $result = mysql_query("SELECT short, url FROM `short_urls` WHERE `short` = ‘$i’") or die(mysql_error());
  9.  //проверка на наличие индентификатора в базе данных
  10.     if (mysql_num_rows($result) < 1) {
  11.         header("Location: http://yoursite.ru");
  12.         exit;
  13.     }else
  14.         {
  15.             $row = mysql_fetch_row($result);
  16.             header("Location: ".$row[1]); //переадресация по хранимому адресу
  17.         }
  18. }
  19. else
  20. {
  21.    header("Location: http://yoursite.ru");
  22. }

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

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

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

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

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

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


Комментарии (1)

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

Оставьте комментарий