Простой скрипт для сокращения URL-адреса
Скрипт сокращения URL на PHP позволяет полностью контролировать работу коротких ссылок без зависимости от внешних сервисов. Это особенно важно, когда ссылки используются в документации, PDF-файлах или внутренних системах и должны легко обновляться.
Вы узнаете, как реализовать простую и понятную логику сокращения ссылок и организовать их хранение в ini-файле. Вы научитесь управлять URL так, чтобы их можно было быстро менять, расширять функциональность и адаптировать решение под конкретные задачи.
Проблема сторонних онлайн решений
Эта проблема может быть решена с помощью скрипта для сокращения 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-файла.
Конечно, в данном скрипте можно еще много чего реализовать. Надеюсь, что мое творение было для вас полезным!
Комментарии
Как исправить ошибки:
Warning: syntax error, unexpected '=' in links.ini on line 3 in C:xampphtdocssitetestlindex.php on line 3
Warning: array_key_exists() expects parameter 2 to be array, bool given in C:xampphtdocssitetestlindex.php on line 5
Unknown link.
Протестировал, действительно простое и рабочее решение, буду использовать. спасибо автору!
Спасибо! Это действительно удобное, практичное и простое решение! Прям душа радуется!
не работает!
Спасибо вам огромное! Очень интересно 🙂
СУПЕР! Всё перерыл, чтоб без БД и вообще... ТО ЧТО НАДО!
Огромное спасибо!
Значения ключей в links.ini в кавычки взять нужно, иначе ошибка.. А в целом как поисковики относятся к подобному перенаправлению? Короткая ссылка 301 отдает?..
Благодарю) а то вставил ссылку domen.com/click?pid=00812&offer_id=01&sub1=mylink и ничего не работает) ошибку выдало. Поместил ссылку в кавычки и все сработало.