Генерация коротких ссылок php

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

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

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

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

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

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

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

Идея

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

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

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

INI-файл

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

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

Наш 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).

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 »

Источник

Генерация короткой ссылки в PHP

Данный скрипт укорачивает ссылки и записывает/считывает их в базу.

class ShortURLCreator
protected static $chars = «123456789bcdfghjkmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ»;

// таблица БД в которую будем сохранять ссылки
protected static $table = «short_urls»;

// проверка URL на наличие в базе
protected static $checkUrlExists = true;

// время запуска скрипта
protected $timestamp;

// в конструктор передаем объект PDO
public function __construct(PDO $pdo)

$this->pdo = $pdo;
$this->timestamp = $_SERVER[«REQUEST_TIME»];
>

// метод преобразующий URL в короткий код
public function urlToShortCode($url)
// если пусто
if (empty($url)) throw new Exception(«Нет URL. «);
>

// проверить формат URL
if ($this->validateUrlFormat($url) == false) throw new Exception(
«Неправильный формат URL адреса. «);
>

// если надо проверять URL на существование
if (self::$checkUrlExists) if (!$this->verifyUrlExists($url)) throw new Exception(
«Такого URL в базе нет. «);
>
>

// генерируем ShortCode
$shortCode = $this->urlExistsInDb($url);
if ($shortCode == false) $shortCode = $this->createShortCode($url);
>

// функция проверки URL на валидность
protected function validateUrlFormat($url) return filter_var($url, FILTER_VALIDATE_URL,FILTER_FLAG_HOST_REQUIRED);
>

// проверяем URL на существование в Интернете
protected function verifyUrlExists($url) $ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch);
$response = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

// вытаскиваем URL из таблицы
protected function urlExistsInDb($url) $query = «SELECT short_code FROM » . self::$table .
» WHERE long_url = :long_url LIMIT 1″;
$stmt = $this->pdo->prepare($query);
$params = array(
«long_url» => $url
);
$stmt->execute($params);

$result = $stmt->fetch();
return (empty($result)) ? false : $result[«short_code»];
>

// метод создает ShortCode
protected function createShortCode($url) $id = $this->insertUrlInDb($url);
$shortCode = $this->convertIntToShortCode($id);
$this->insertShortCodeInDb($id, $shortCode);
return $shortCode;
>

// вставка в базу
protected function insertUrlInDb($url) $query = «INSERT INTO » . self::$table .
» (long_url, date_created) » .
» VALUES (:long_url, :timestamp)»;
$stmnt = $this->pdo->prepare($query);
$params = array(
«long_url» => $url,
«timestamp» => $this->timestamp
);
$stmnt->execute($params);

//
protected function convertIntToShortCode($id) $id = intval($id);
if ($id < 1) throw new Exception(
«ID не является числом. «);
>

if ($length < 10) throw new Exception("Длина последовательности слишком мала!");
>

$code = «»;
while ($id > $length — 1)

Читайте также:  Объединение ячеек

$code = self::$chars[fmod($id, $length)] . $code;

protected function insertShortCodeInDb($id, $code) if ($id == null || $code == null) throw new Exception(«Input parameter(s) invalid.»);
>
$query = «UPDATE » . self::$table .
» SET short_code = :short_code WHERE/> $stmnt = $this->pdo->prepare($query);
$params = array(
«short_code» => $code,
«id» => $id
);
$stmnt->execute($params);

if ($stmnt->rowCount() < 1) throw new Exception(
«Строка не была обновлена. «);
>

Создано 25.02.2020 13:14:59

  • Михаил Русаков
  • Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

    Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
    Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

    Если Вы не хотите пропустить новые материалы на сайте,
    то Вы можете подписаться на обновления: Подписаться на обновления

    Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

    Порекомендуйте эту статью друзьям:

    Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

    1. Кнопка:
      Она выглядит вот так:
    2. Текстовая ссылка:
      Она выглядит вот так: Как создать свой сайт
    3. BB-код ссылки для форумов (например, можете поставить её в подписи):

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

    $code = self::$chars[ $id ] . $code можно заменить на $code = self::$chars[ $id — 1 ] . $code, чтобы первая короткая ссылка была /1/, а не /2/

    Для добавления комментариев надо войти в систему.
    Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

    Copyright © 2010-2023 Русаков Михаил Юрьевич. Все права защищены.

    Источник

    Генерация коротких ссылок php

    В этом разделе помещены уроки по PHP скриптам, которые Вы сможете использовать на своих ресурсах.

    Фильтрация данных с помощью zend-filter

    Когда речь идёт о безопасности веб-сайта, то фраза «фильтруйте всё, экранируйте всё» всегда будет актуальна. Сегодня поговорим о фильтрации данных.

    Контекстное экранирование с помощью zend-escaper

    Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.

    Подключение Zend модулей к Expressive

    Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.

    Совет: отправка информации в Google Analytics через API

    Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.

    Подборка PHP песочниц

    Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.

    Совет: активация отображения всех ошибок в PHP

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

    Источник

    Saved searches

    Use saved searches to filter your results more quickly

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

    Читайте также:  METANIT.COM

    briancray/PHP-URL-Shortener

    This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

    Name already in use

    A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

    Sign In Required

    Please sign in to use Codespaces.

    Launching GitHub Desktop

    If nothing happens, download GitHub Desktop and try again.

    Launching GitHub Desktop

    If nothing happens, download GitHub Desktop and try again.

    Launching Xcode

    If nothing happens, download Xcode and try again.

    Launching Visual Studio Code

    Your codespace will open once ready.

    There was a problem preparing your codespace, please try again.

    Latest commit

    Git stats

    Files

    Failed to load latest commit information.

    README

    License: http://www.gnu.org/licenses/gpl-2.0.html Benefits - Can shorten over 42 billion unique URLs in 6 or less characters (it can do more than 12,000,000 in only 4!) - Super duper fast—uses very little server resources - Includes an API so you can create your own short URLs on the fly - Option to turn clickthru tracking on and off - Option to limit usage to 1 IP address for personal use and to prevent spamming from others - Only uses alphanumeric characters so all browsers can interpret the URL - Secure—several data filters in place to prevent SQL injection hacks - Option to check if the URL is real (doesn’t respond with a 404) before shortening - Uses 301 redirects for SEO and analytics yumminess - Option to store a local cache to prevent database queries on every redirect - Option to change the characters allowed in a shortened url Installation 1. Make sure your server meets the requirements: a) Optionally you can run this from your current domain or find a short domain b) Apache c) PHP d) MySQL e) Access to run SQL queries for installation 2. Download a .zip file of the PHP URL shortener script files 3. Upload the contents of the .zip file to your web server 4. Update the database info in config.php 5. Run the SQL included in shortenedurls.sql. Many people use phpMyAdmin for this, if you can’t do it yourself contact your host. 6. Rename rename.htaccess to .htaccess 7. If you want to use the caching option, create a directory named cache with permissions 777 Using your personal URL shortener service - To manually shorten URLs open in your web browser the location where you uploaded the files. - To programmatically shorten URLs with PHP use the following code: $shortenedurl = file_get_contents('http://yourdomain.com/shorten.php?longurl=' . urlencode('http://' . $_SERVER['HTTP_HOST'] . '/' . $_SERVER['REQUEST_URI']));

    Источник

    Оцените статью