Простой скрипт для сокращения URL-адреса

СКАЧАТЬ ИСХОДНИКИ

Мне нравится решать проблемы с помощью маленьких и компактных скриптов. Чем меньше кода нужно написать, тем лучше. Недавно у меня в очередной раз появился шанс это сделать.

Требовалось встроить в PDF-документы ссылки, которые могли изменяться в будущем.

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

Эта проблема может быть решена с помощью скрипта для сокращения URL-адресов. Уже довольно давно существуют сервисы, предоставляющие такие возможности, но они не без недостатков. Вот некоторые из них:

  • Зависимость от внешнего сервиса – когда он не работает, ссылки тоже оказываются недоступными. Еще хуже, если сервис закрывается – сами понимаете к чему это приведет;
  • Вся статистика отслеживается сторонними сервисами;
  • Обычно, не разрешается изменять вид укороченных ссылок;
  • Некоторые сервисы позволяют выбрать свои псевдонимы, но большинство назначает их автоматически.

Итак, задача состоит в написании собственного PHP-скрипта, который был позволил решать задачу, описанную выше!

Идея

Если скрипт создается исключительно для собственного пользования, то можно опустить создание таких вещей, как регистрация пользователя и административная панель. Ниже перечислены возможности, которыми должен обладать наш будущий скрипт:

  • Короткие ссылки будут иметь вид http://example.com/l/short-link. Посещение данного URL-адреса будет переадресовываться на реальный адрес;
  • Весь скрипт будет располагаться в единственном файле – index.php, без внешних зависимостей;
  • Панель администратора с инструментами добавления и редактирования ссылок отсутствует. Все будет управляться с помощью простого текстового файла, расположенного на сервере, который очень легко отредактировать;
  • Идентификаторы не будут автоматически присваиваться ссылкам – вы сами будете вводить псевдоним.

Эти пункты упростят наш будущий скрипт. Чтобы сделать все еще более понятным, я решил хранить ссылки в INI-файле, потому что его легко отредактировать и PHP имеет их встроенную поддержку через функцию parse_ini_file (это убережет нас от необходимости читать содержимое файла и парсить его вручную, к тому же эта функция работает очень быстро).

INI-файл

INI-файл выглядит так:

links.ini

google  = https://www.google.com/ 
fb	= https://www.facebook.com/

Слева короткая ссылка, а справа - длинная. Все очень просто!

Реализация

Наш PHP-скрипт гениально прост:

index.php

$links = parse_ini_file('links.ini'); 
if(isset($_GET['l']) && array_key_exists($_GET['l'], $links)){
     header('Location: ' . $links[$_GET['l']]);
} else{
     header('HTTP/1.0 404 Not Found');
     echo 'Unknown link.'; 
}

Скрипт ожидает получения псевдонима в массиве $_GET['l'], который выглядит например так: http://example.com/index.php?l=google.

Конечно это не сокращение, но мы можем улучшить это с помощью файла .htaccess (используется для запуска веб-сервера Apache).

.htaccess

RewriteEngine On  

RewriteCond $1 !^(index.php) 
RewriteRule ^(.*)$ index.php?l=$1 [L]

Этот файл должен находиться в той же директории, что и index.php и links.ini. Его назначение состоит в том, чтобы перенаправлять каждый запрос, который идет НЕ к файлу index.php, на адрес вида index.php?l=xxx. Это защитит от циклических ссылок и сделает файл links.ini недоступным из браузера.

Для достижения наилучших результатов, поместите три этих файла в папку с коротким именем, к примеру «l», в корневую папку сайта, и получите короткий вид ссылок в форме http://example.com/l/google.

Пример с сайтом google.com не слишком нагляден, так как укороченная ссылка получается длиннее оригинала, однако важно было показать именно суть работы механизма, что, надеюсь, и было достигнуто.

Заключение

Если вы не хотите хранить ссылки в отдельном файле, то можете поместить их в ассоциативный массив внутри скрипта.

Еще одно улучшение, которое можно сделать, это создать простейший административный интерфейс, чтобы можно было менять содержимое INI-файла.

Конечно, в данном скрипте можно еще много чего реализовать. Надеюсь, что мое творение было для вас полезным!

Вадим Дворниковавтор-переводчик статьи «Quick Tip - Create a Simple URL Shortener With 10 Lines of PHP»