СКАЧАТЬ ИСХОДНИКИ
Мне нравится решать проблемы с помощью маленьких и компактных скриптов. Чем меньше кода нужно написать, тем лучше. Недавно у меня в очередной раз появился шанс это сделать.
Требовалось встроить в 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» был подготовлен дружной командой проекта Сайтостроение от А до Я.