Скрипт короткие ссылки на php и mysql - сокращение url

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

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

Скачать скрипт короткие ссылки на php sql

php5.6 и выше, лучше 7
Демо пример
извените сервер время от времени тупит.

Что умеет скрипт короткие ссылки:

Конфиг скрипта, пример.

# index.php: V3.2
// КОНФИГ:  
if (false) { ini_set('display_errors',1); error_reporting(E_ALL | E_STRICT); } else { ini_set('display_errors', 0); error_reporting(0); } # Отладка (false - вык., true - вкл.)
setlocale(LC_TIME, "ru_RU.utf8");                                   # Кодировка желательна utf-8
date_default_timezone_set('Europe/Moscow');                         # Временная зона
$_CONFIG['INF_DOMAIN'] = array('https://domain1.com' => '');        # Домен для переадресации и его префикс (префикс корректируется в тандеме с .htaccess)
$_CONFIG['LOG_ERRORS'] = 1;                                         # Лог ошибок введенных данных в форме
$_CONFIG['PASSWORD_ONOFF'] = 0;                                     # пароль Front-end включить/выключить 1/0
$_CONFIG['PASSWORD'] = '5825';                                      # пароль Front-end
$_CONFIG['PSWD_ADM'] = '827ccb0eea8a706c4c34a16891f84e7b';          # пароль Админа в MD5 формате '12345' (с генерируйте его сами и вставьте тут)
$_CONFIG['URI_ADM'] = 'admin';                                      # адрес админки, смените для безопасности!!!
$_CONFIG['BLOCKING_USER'] = array();                                # Запретить вход на сайт по IP или диапазону.                              
$_CONFIG['BAD_POST_URL'] = 'xxx.ru|xxx.com';                        # Запрещенные домены (Кириллица - регистроЗависимая)
$_CONFIG['MAX_SYMBOL_LONG_URL'] = 4000;                             # максимум символов в длинным url, стандарт 4000.
$_CONFIG['MIN_SYMBOL_LONG_URL']= 8;                                 # минимум символов в длинном url (8 минимум)
$_CONFIG['MIN_SYMBOL_SHORT_URL'] = 3;                               # Минимум символов в коротком url 
$_CONFIG['MAX_SYMBOL_SHORT_URL'] = 40;                              # Максимум символов в коротком url
$_CONFIG['BAN_POST_SHORT_URL'] = 'xxx.html|fack';                   # Запрещенные короткие urlы 
$_CONFIG['SEND_HEADER_ARR'] = array('301 Moved Permanently',        # Отправляемые http заголовки 3xx: Redirection (перенаправление)            
                                    '302 Found',
                                    '307 Temporary Redirect',
                                    '303 See Other',
                                    "305 Use Proxy");                      
$_CONFIG['SEND_HEADER_DEFAUL'] = 1;                                 # Отправляемый заголовок по дифолту (счет с нуля)
$_CONFIG['CLOCK_TIME_DEFAUL'] = 168;                                # Время хранения ссылки в часах по дифолту (неделя => 7 дней * 24 часа = 168 часов)
$_CONFIG['CLOCK_TIME_ARR'] = array( 1 => 'час',                     # Дополнительные пункты "Время хранения ссылки".
                                    24 => 'сутки',              
                                    168 => 'неделя',            
                                    744 => 'месяц',
                                    4463 => 'полгода',
                                    87600 => 'максимум');           # 10 лет
$_CONFIG['CLOCK_TIME_SORT'] = 3;                                    # разбивка списка переменной CLOCK_TIME_ARR
$_CONFIG['URI_PROTOCOL_BAD'] = 'dns:|soldat:|ssh:|file:';           # запрещенные протоколы 
                                                                    # разрешенные протоколы:
$_CONFIG['URI_PROTOCOL_GOOD'] = 'cid:|crid:|data:|dav:|dict:|fax:|ftp:|go:|gopher:|h323:|http:|https:|im:|imap:|ldap:|mailto:|mid:|news:|nfs:|nntp:|pop:|pres:|rtsp:|tel:|telnet:|urn:|wais:|xmpp:|about:|aim:|bolo:|btc:|bzr:|callto:|chrome:|cvs:|daap:|ed2k:|ed2kftp:|feed:|fish:|git:|irc:|ircs:|lastfm:|ldaps:|magnet:|mms:|msnim:|rsync:|skype:|svn:|sftp:|smb:|sms:|steam:|unreal:|view-source:|vzochat:|webcal:|xfire:|ymsgr'; 
...

Как установить скрипт короткие ссылки

Для работы скрипта требуется php и база данных mysql.
Создать базу данных mysql, и в phpmyadmin импортировать дамп файл shortLinks.sql. Залить файлы в архиве на сервер и отредактировать файл index.php прописав в нем данные для конекта к базе, покрутить настройки и запустить его. Будут вопросы задавайте.

# Хелпы и факю

$_CONFIG['INF_DOMAIN'] Как добавлять домены?
Для добавления домена нужно добавить в массив новый домен и его префикс:
$_CONFIG['INF_DOMAIN'] = array('https://domain1.com' => '', 'https://domain2.net' => '-');
Префикс - нужен как правило если на домене уже имеется какой либо вебсайт и нужно чтобы была совместимость с короткими ссылками.
Используйте для нового домена папку [other-domains].
.htaccess - откорректируйте с учетом выбранного вами префикса.
shortLinks.php - подключитесь к базе данных.
Количество доменов не ограничено.
$_CONFIG['PSWD_ADM'] Пароль админа шифрованный в md5 (однократно), по дифолту пароль 12345.
Сгенерируйте свой пароль в md5 и присвойте его этой переменной.
Как? вот несколько способов:
  • Спомощью notepad++ > Инструменты > MD5 > Сгенерировать
  • На своем сервере выполнив php код: echo md5('12345');
  • Онлайн сервисами
$_CONFIG['URI_ADM'] url адрес администрированной панели. По дифолту адрес: www.domain.ru/?admin.
Смените адрес на свой для безопасности!
Файлы и папки, описание:
[other-domains]   // для редиректа доменов С префиксом
.htaccess -       // для редиректа БЕЗ префикса
func.php          // скрипт
index.php         // шаблон и настройки (при обновлении скрипта, файл НЕ ОБНОВЛЯЕТСЯ)
shortLinks.sql    // дамп БД для импорта
script.js
style.css
Задержка переадресации для показа рекламы, пример:
...
### РЕДИРЕКТ КОРОТКОГО URL
    elseif(isset($_GET['redirLink'])):    
    
        if(isset($_COOKIE[''.$_GET['redirLink'].''])) redirLink(); 
        else 
        setcookie($_GET['redirLink'], $_GET['redirLink']);
        echo '<script>setTimeout(function(){window.location.reload(1);}, 3000);</script>';
        echo 'ваша реклама показывается 3 секунды, далее редирект';
        
...        

  1. # 55555 24 июня 2019, 17:47
    Ссылка просрочена или не существует, как исправить? Обновил до 3 версии но вот такое всплывает.
    1. # Телек 24 июня 2019, 17:50 (Комментарий был изменён)
      Возможно у Вас База данных не обновленна, файлы вы обновили а БД так и осталась старой.
      или Вы с нуля устанавливали?

      чтобы видеть ошибки включите отладку в конфиге с false на true
      1. # 55555 24 июня 2019, 17:53 (Комментарий был изменён)
        Все с нуля обновил, и базу.
        1. # Телек 24 июня 2019, 18:00 (Комментарий был изменён)
          когда он выдает такую ошибку в адресной строке пишется номер ошибки типо:
          www.site.ru/?notice#123
          Мне так кажется что скрипт не может записать в базу данных т.к. либо отсутствует права на запись в базе данных либо еще чтонибудь…
          Скажите какой номер ошибки и включите отладку чтоб видеть ошибки.
          1. # 55555 24 июня 2019, 18:08 (Комментарий был изменён)
            Включил, результат ноль.
            1. # 55555 24 июня 2019, 18:10
              302 Found
              2029-06-21 18:07:47
              85.174.55.108
              NULL
              NULL
              NULL
              NULL в базе не прописывается
              1. # 55555 24 июня 2019, 18:12
                Ошибка 58
                1. # Телек 24 июня 2019, 18:15 (Комментарий был изменён)
                  [сообщение удалено]

                  Так… эти ячейки заполняются при первом заходе по ссылке
                  1. # Телек 24 июня 2019, 18:44
                    Вопрос решился.
                    1. # Aksen 06 октября 2019, 19:29
                      А как вопрос решился? Подскажи, в чем проблема, у меня тоже 58 ошибка
                      1. # Телек 06 октября 2019, 19:36
                        У него был не правельно настроен конфиг, а именно, перечислены несколько одинаковых доменов.
                        В этой строке:
                        _CONFIG['INF_DOMAIN'] = array('https://domain1.com' => '');        # Домен для переадресации и его префикс (префикс корректируется в тандеме с .htaccess)
                        Укажите там свой домен, и пере проверьте ваш конфиг, и манулал взгляните чтоб наверняка.
                        1. # Aksen 07 октября 2019, 11:07
                          Да я все перепроверил. Скрипт не дает сделать короткую ссылку более 1-го раза на 1 страницу.
                          1. # Телек 07 октября 2019, 14:16 (Комментарий был изменён)
                            Скиньте ссылку со скриптом, посмотрю,
                            И из конфига сюда запостите строку с параметром
                            $_CONFIG['INF_DOMAIN']
                            1. # Aksen 07 октября 2019, 14:29
                              А можно с вами связаться в телеграме?
                              1. # Телек 07 октября 2019, 18:07
                                Написал Вам в почту.
                          2. # 55555 24 июня 2019, 16:16
                            Сгенерировал MD5, куда его вставить?
                            1. # Телек 24 июня 2019, 16:22 (Комментарий был изменён)
                              В файле index.php найти в конфиге эту переменую:
                              $_CONFIG['PSWD_ADM'] 
                              и заменить md5 хеш на ваш.
                              $_CONFIG['PSWD_ADM'] = 'СЮДА ВСТАВЛЯТЬ'
                              1. # 55555 24 июня 2019, 16:30
                                ))) У меня 1я версия, там нет. Надо обновить до 3й, там есть. Особенность обновления есть?
                                1. # Телек 24 июня 2019, 16:33
                                  Калосальные изменение, как архитектуры так и функционала.
                                  Также при последующих обновлениях не снесется ваш дизайн.
                            2. # 55555 24 июня 2019, 15:48
                              Здравствуйте. Как попасть в админку?
                              1. # Телек 24 июня 2019, 15:51
                                Если вы не корректировали
                                $_CONFIG['URI_ADM']
                                то адрес стандартный как описан выше в хелпах.
                                Www.вашдомен/?admin
                              2. # obmen86 13 апреля 2019, 09:53
                                Давненько не было обновление :(
                                Планируется ли выпуск обновления, что там будет и когда )))
                                1. # Телек 24 мая 2019, 02:48
                                  Новая версия 3.2
                                  1. # obmen86 01 июня 2019, 09:36
                                    А, что нового то?
                                    Как обновить без потери старых данных :)
                                    1. # Телек 01 июня 2019, 09:40
                                      Заменить все файлы кроме index.php — который является шаблонным.
                                      Исправленны программные ошибки.
                                      1. # obmen86 01 июня 2019, 10:43
                                        Как настроить задержку для показа рекламы не совсем понятно
                                        1. # Телек 01 июня 2019, 11:03
                                          Загляните в хелпы это выше коментов, там пример рабочий специально для Вас.
                                          1. # obmen86 01 июня 2019, 12:19
                                            Вопрос куда вставлять, также в index?
                                            1. # Телек 01 июня 2019, 16:55 (Комментарий был изменён)
                                              index.php — является ШАБЛОННЫМ!..
                                              func.php — программа, её не желательно корректировать т.к при обновлении в основном он обновляется.

                                              Для добавлении таймера с рекламой, нужно откорректировать index.php
                                              и найти строку:
                                              ...
                                              ### РЕДИРЕКТ КОРОТКОГО URL 
                                              	elseif(isset($_GET['redirLink'])): redirLink();
                                              ...
                                              
                                              Функция redirLink(); это и есть обработчик коротких url, ему нужно поставить условие.
                                              Для этого уберем функцию redirLink(); (то что после двоеточий) чтобы не переадресовывал нас и добавляем условие чуть ниже:

                                              ...
                                              if(isset($_COOKIE[''.$_GET['redirLink'].''])) redirLink(); 
                                              else 
                                              setcookie($_GET['redirLink'], $_GET['redirLink']); 
                                              echo '<script>setTimeout(function(){window.location.reload(1);}, 3000);</script>'; 
                                              echo 'ваша реклама показывается 3 секунды, далее редирект';
                                              ...
                                              
                                              Логика такова: при переходе по ссылке проверяет есть ли куки, если есть вызываем нашу функцию redirLink(); для переадресации, если нет то запишем куки и покажем рекламу с ожиданием 3сек, далее страница перезагружается и все с начало. Есть ли куки и учитывая что мы уже записали вызывается функция redirLink();

                                              Как показано в хелпах примерах.
                                        2. # obmen86 09 февраля 2019, 12:43
                                          Сделать бы какой-то плагин для популярных CMS, чтобы можно было ссылки сокращать через основной сайт (это больше для админов сайтов сокращения ссылок).
                                          Только как, вопрос :)

                                          Типа Wordpress, DLE. Ставишь плагин и сервис сокращает и изменяет ссылки на сторонние ресурсы через основной сайт (который на скрипте работает).

                                          Есть предложение как реализовать?
                                          1. # Телек 09 февраля 2019, 13:09
                                            Чтоб особо не заморачиваться, при авторизации в движке автоматом авторизуется и в админке скрипта. И в движке добавить пруф на админку скрипта.
                                          2. # obmen86 03 февраля 2019, 19:26
                                            Добрый день.
                                            Не работает скрипт сокращения geurl.ru
                                            1. # Телек 04 февраля 2019, 03:15 (Комментарий был изменён)
                                              Файл htaccess писал под apache, а nginx как раз то что у Вас не учел.
                                              В корне дериктории скрипта замените в htaccess все содержимое на:
                                              # nginx configuration
                                              
                                              location / {
                                                if (!-e $request_filename){
                                                  rewrite ^(.*)$ /index.php?redirLink=$1;
                                                }
                                              }
                                              1. # obmen86 05 февраля 2019, 20:11
                                                Теперь совсем не работает сайт :(
                                                1. # Телек 06 февраля 2019, 13:59
                                                  Я так понимаю что у Вас статику (картинки, стили и т.д) отдает nginx а проксирует запросы на apache для обработки php.
                                                  По этому htaccess верните старый и проверьте свой журнал ошибок httpd ну естественно прогуглите их…
                                                  1. # obmen86 07 февраля 2019, 05:23
                                                    Перезалил и заработало, оч странно…
                                                    Пожелания:
                                                    1. Сделать ЛК для пользователя (где хранились бы его ссылки)
                                                    2. Сделать возможность временной задержки при переходе (например 10 сек.) для получения средств от платной рекламы. А также платную подписку для отключения и моментального перехода
                                                    3. Сделать возможность вписать дизайн (не нашел сейчас).
                                                    1. # Телек 07 февраля 2019, 12:23 (Комментарий был изменён)
                                                      Возможно была ошибка с правами доступа или левый символ пролез…
                                                      2. Да, Вы дельные пожелания предложили, реализую при первой возможности.
                                                      3. Что вы именно предлагаете?
                                                      На текущий момент файл index.php готов редактироваться под ваши нужды или же просто интегрируется к примеру инклудом, предварительно удалив head заголовки.
                                                      1. # obmen86 08 февраля 2019, 05:16
                                                        Я предлагаю полностью вытащить дизайн из index.php перенеся его в админку или отдельные файлы (верх/низ) для отдельного редактирования и в последующем, при обновлении дизайн чтобы не снесся.
                                                        1. # obmen86 08 февраля 2019, 06:37
                                                          Ну и сделать адаптацию под мобильную версию
                                                          1. # Телек 09 февраля 2019, 01:24 (Комментарий был изменён)
                                                            Файл index.php является шаблонным и при последующих обновлений скрипта этот файл можно не обновлять / не заменять.
                                                            Таким образом можно делать и мобильную версию и делать временную задержку с рекламой — поставив условие функции redirLink();
                                                            ### РЕДИРЕКТ КОРОТКОГО URL
                                                            elseif(isset($_GET['redirLink'])): redirLink();
                                                            1. # obmen86 09 февраля 2019, 04:57
                                                              Мне кажется удобнее разграничевать начать файлы, так как в будущем и личный кабинет и рекламу может будет юе лелаиь, а это неизбежно приведёт к перевожу дизайна в отдельный файл, и так далее
                                                              1. # Телек 09 февраля 2019, 12:53
                                                                Дык пожалуйста… делайте, шаблон это позволяет и разограничивать и подключать файлы, как Вам удобней…
                                                          2. # FeeWebber 09 ноября 2018, 11:31
                                                            Добрый день, у меня при формировании короткой ссылки «domain.ru/-sds» после слеша постоянно приписывается дефис "-" можно ли сделать так что бы его не было в начале?

                                                            Спасибо.
                                                            1. # Телевизор 09 ноября 2018, 12:15
                                                              Эта приставка в виде дефиса разграничивает ресурсы между вашими страницами и этим скриптом.
                                                              Т.е если вы создадите свой ресурс-страницу в этом же корне домена то переадресация коротких ссылок будет работать и не пересекаться с вашим ресурсом.
                                                              В принципе можно эту приставку убрать но тогда вы не сможете создавать свои страницы в этом домене.

                                                              При первой возможности сделаю это функционально с выбором.
                                                              1. # FeeWebber 09 ноября 2018, 16:47
                                                                спасибо, ну у меня домен специально для коротких ссылок =)
                                                                1. # FeeWebber 12 ноября 2018, 13:39
                                                                  Я думаю, не плохо было бы если была возможность выбора без спец символа и добавлять свой спец символ @ # и т.д… =)
                                                                  1. # Телевизор 12 ноября 2018, 15:12
                                                                    Да уже сделал, многое переделал и улучшил, как например разделил скрипт и html — что бы не было болезненно при обновлении.
                                                                    А также теперь на разных доменах можно с префиксом и без него.
                                                                    На днях опубликую и Вас уведомлю.
                                                              2. # Влад22 11 октября 2018, 14:31
                                                                Здравствуйте, подскажите пожалуйста в чем может быть проблема. Не создается в Базе запись. Сама База подключена правильно

                                                                Спасибо
                                                                1. # Телевизор 11 октября 2018, 17:01 (Комментарий был изменён)
                                                                  О какой версии идет речь?
                                                                  В самом начале index.php, есть режим отладки: смените с false на true и помониторте ошибки.
                                                                  1. # Влад22 11 октября 2018, 21:00
                                                                    Причина: на MySQL 5.7.21-0ubuntu0.16.04.1 не работает
                                                                    1. # Телевизор 11 октября 2018, 21:07
                                                                      Дык какую версию юзаете?
                                                                      1. # Влад22 11 октября 2018, 21:11
                                                                        v2.0
                                                                        1. # Телевизор 11 октября 2018, 22:08 (Комментарий был изменён)
                                                                          Гуд, у меня вообще марияДБ, а демка на MySql и все гуд — запросы одни и теже.
                                                                          скиньте ошибку лог а то не понятно так.
                                                                          1. # Влад22 11 октября 2018, 23:19
                                                                            Я немного некорректно написал. Об этом понял позже. Дело в том, что у меня на сервере работает высоконагруженный сайт и База настраивалась под него. Так что дело не в версии, а в индивидуальных настройках. На другом сервере ваш скрипт работает на УРА!!!

                                                                            Скажите, а какую роль выполняет «Эта [Кнопка] как рулетка.»?
                                                                            1. # Телевизор 12 октября 2018, 00:06
                                                                              Очищает БД от не актуальных по времени хранения ссылок.
                                                                              Цифры указывают количество ссылок в БД.
                                                                              P.s чтобы не юзать крон, боты лазиющие по сайту сами активируют чистку.
                                                                              1. # Влад22 12 октября 2018, 00:35
                                                                                Аплодирую стоя!!! Весьма хитроумное решение.

                                                                                Спасибо за скрипт
                                                                          2. # 55555 07 сентября 2018, 14:42 (Комментарий был изменён)
                                                                            Если ссылку не генерировать а просто нажать кнопку «ПОЛУЧИТЬ ССЫЛКУ» то получается сверху фигня, где подправить?
                                                                            1. # Телевизор 07 сентября 2018, 16:06
                                                                              какая у Вас версия php?
                                                                              1. # 55555 07 сентября 2018, 16:24 (Комментарий был изменён)
                                                                                Я хотел убрать это-----> [Delete] Вернул на место, все заработало ) PHP 5.6 стоит, кака должна PHP 5.2 — 7.2?
                                                                                1. # Телевизор 07 сентября 2018, 16:45
                                                                                  Она как раз под php 5.6.
                                                                                  В любом случае сегодня опубликую и для php7.
                                                                            2. # 55555 04 сентября 2018, 21:56
                                                                              Не качается «Блокируется реклама!
                                                                              Отключив блокировку рекламы, Вы сможете
                                                                              бесплатно скачать файл с наших серверов.»
                                                                              1. # Телевизор 05 сентября 2018, 01:26
                                                                                Дык отключите блокировку рекламы в вашем браузере.
                                                                                1. # 55555 05 сентября 2018, 07:12 (Комментарий был изменён)
                                                                                  Дык отключал в 3х браузерах и все равно ни с одного не скачал (((. Ха ха только что скачал на телефон, ссылка появилась. Браузер тотже что и на компе (яндекс) но рекламу в телефоне не отключал, магия…
                                                                                  1. # Телевизор 07 сентября 2018, 11:53
                                                                                    Прошу прощения, исправлено.
                                                                              2. # ОЛЕ 28 марта 2018, 19:29
                                                                                Проблема была в том, что нужно было свое доменное имя указать в $_CONFIG['REDIR_DOMAIN']= array().
                                                                                Спасибо за скрипт)))!
                                                                                1. # ОЛЕ 28 марта 2018, 19:03
                                                                                  Без входа в админку этот скрипт должен работать? Поскольку при попытке перейти в админку выдает оповещение, что «Учетная запись отключена администратором сервера».
                                                                                  Скрипт в меня тоже нормально не работает: выдает постоянно ошибку «Не удается получить доступ к сайту. ERR_NAME_RESOLUTION_FAILED»!
                                                                                  К тому же, последние три колонки в БД остаются пустыми
                                                                                  1. # Телевизор 28 марта 2018, 20:21 (Комментарий был изменён)
                                                                                    Без входа в админку этот скрипт должен работать
                                                                                    да.
                                                                                    Эти ошибки не как не связаны со скриптом, это уже траблы на стороне сервера или браузера.
                                                                                  2. # hi-cd 28 марта 2018, 12:41 (Комментарий был изменён)
                                                                                    Доброго времени суток! Скрипт коротких ссылок так и не удалось запустить. Редирект не работает, перекидывает на сайт первоисточник. [ссылка]
                                                                                    1. # Телевизор 28 марта 2018, 12:58 (Комментарий был изменён)
                                                                                      1) В файле index.php в первой строке включите вывод ошибок на экран, вместо
                                                                                      if (false) замените на if (true)
                                                                                      2) Как мне кажется у Вас не обрабатывается / не настроен .htaccess учитывая что скрипт Вы положили в дерикторию.
                                                                                      Попробуйте файл .htaccess положить в корень вашего домена и в самом файле .htaccess указать верный путь к скрипту
                                                                                      RewriteRule ^-(.*) ПАПКА/?redirLink=$1 [L]
                                                                                      В ведь ваш сайт при редиректе отдает страницу 404 — что означает не верно указанный путь, а путь должен быть к index.php скрипта, далее идет подключение к БД и выборка к переадресуемой ссылке.