Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Укоротитель ссылок [2]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): « 1 [2]   

> Без описания
GoDr
Отправлено: 23 Января, 2015 - 08:31:12
Post Id



Посетитель


Покинул форум
Сообщений всего: 446
Дата рег-ции: Янв. 2015  
Откуда: Тамбов


Помог: 17 раз(а)




да уж... срок огромный Улыбка

В общем чуть-чуть сделал. Времени не так уж много (семья, дети, работа Радость )

что сделал:
- ссылки укорачиваются, но только по одному правилу
- ссылки удаляются
- переадресация
- подсчёт переходов

Часть кода (остальное в архиве):

index.php
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. // Подключаем класс для работы с БД и заодно языковые настройки
  4. require_once('gddbdefine.php');
  5. require_once('gddatabase.php');
  6.  
  7. // Подключаем библиотеку укорачивания ссылок
  8. require_once('short.php');
  9.  
  10. // Подключаем класс шаблонов
  11. require_once('template.php');
  12.  
  13. // На всякий случай будем обрабатывать исключения
  14. try {
  15.     // Получаем задачу
  16.     $task = (isset($_REQUEST['task'])) ? $_REQUEST['task'] : '';
  17.  
  18.     switch ($task) {
  19.  
  20.         // переход по ссылки
  21.     case 'redirect':
  22.         $id = (isset($_REQUEST['id'])) ? $_REQUEST['id'] : 0;
  23.         LibShortUrl::Init()->redirectUrl($id);
  24.         echo "<script>window.location='"._GDDB_PATH_SITE."'</script>";
  25.         break;
  26.  
  27.         // удаление ссылок
  28.     case 'delete':
  29.         $id = (isset($_REQUEST['id'])) ? $_REQUEST['id'] : 0;
  30.         fDefault(Template::viewMessage('Ссылка ' . LibShortUrl::Init()->deleteUrl($id) . ' удалена'));
  31.         break;
  32.  
  33.         // создание новой ссылки
  34.     case 'create':
  35.         $url = (isset($_REQUEST['url'])) ? $_REQUEST['url'] : '';
  36.         fDefault(Template::viewMessage('Создана короткая ссылка: ' . LibShortUrl::Init()->createShortUrl($url)));
  37.         break;
  38.  
  39.         // вывод по умолчанию начальной страницы
  40.     default:
  41.         fDefault();
  42.     }
  43.  
  44. } catch (Exception $e) {
  45.     echo '<div style="color:#f00">';
  46.     echo '<i>Ошибка: </i>' . $e->getMessage() . '<br>';
  47.     echo '<i>Файл: </i>' . $e->getFile() . '<br>';
  48.     echo '<i>Строка: </i>' . $e->getLine();
  49.     echo '<pre>' . $e->getTraceAsString() . '</pre>';
  50.     echo '</div>';
  51. }
  52.  
  53. function fDefault()
  54. {
  55.     $links = array();
  56.     $link  = '';
  57.     $rows  = LibShortUrl::Init()->getAllUrl();
  58.     if (!empty($rows)) {
  59.         foreach ($rows as $value) {
  60.             $links[] = Template::getInputLink($value['id'], $value['short'], $value['original']);
  61.         }
  62.         $link .= '<table>';
  63.         $link .= '<tr><th>Короткий URL</th><th>Длинный URL</th><th>Действие</th></tr>';
  64.         $link .= '<tr>' . implode('', $links) . '</tr>';
  65.         $link .= '</table>';
  66.     }
  67.     Template::pageDefault($link);
  68. }


template.php (Класс шаблона)
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. /**
  4.  * @package     Template
  5.  * @version     1.0
  6.  * @author      Gold Dragon <illusive@bk.ru>
  7.  * @link        http://gd.lotos-cms.ru
  8.  * @copyright   2000-2015 Gold Dragon
  9.  * @license     MIT License: http://opensource.org/licenses/MIT
  10.  * @date        22.01.2015
  11.  *
  12.  * @description Класс шаблона
  13.  */
  14. class Template
  15. {
  16.     /**
  17.      * Основной шаблон страницы
  18.      *
  19.      * @param string $content : контент
  20.      * @param string $message : информационное сообщение
  21.      */
  22.     private static function pageBody($content, $message = '')
  23.     {
  24.         ?>
  25.         <!doctype html>
  26.         <html lang="ru">
  27.         <head>
  28.             <meta charset="UTF-8">
  29.             <title>Укоротитель ссылок</title>
  30.             <style>
  31.                 td, th {
  32.                     border: 1px #999 solid;
  33.                     padding: 5px;
  34.                 }
  35.             </style>
  36.         </head>
  37.         <body>
  38.         <?PHP echo $message; ?>
  39.         <?PHP echo $content; ?>
  40.         </body>
  41.         </html>
  42.     <?PHP
  43.     }
  44.  
  45.     /**
  46.      * Главная страница
  47.      *
  48.      * @param string $links : ссылки которые уже в базе
  49.      */
  50.     public static function pageDefault($links = '')
  51.     {
  52.         ob_start();
  53.         ?>
  54.         <h2>Укоротить URL</h2>
  55.         <form action="" method="post">
  56.             <label>Ссылка: <input type="text" size="70" name="url" placeholder="Введите URL для сокращения"/></label>
  57.             <input name="task" type="hidden" value="create"/>
  58.             <input type="submit" name="save" value="Укоротить"/>
  59.         </form>
  60.         <h3>Существующие ссылки:</h3>
  61.         <?PHP echo $links; ?>
  62.         <?PHP
  63.         $content = ob_get_contents();
  64.         ob_end_clean();
  65.  
  66.         self::pageBody($content);
  67.     }
  68.  
  69.     public static function getInputLink($id, $short, $original)
  70.     {
  71.         $result = '<tr>';
  72.         $result .= '<td>' . $short . '</td><td>' . $original . '</td>';
  73.         $result .= '<td><a href="index.php?task=delete&id=' . $id . '">Удалить</a><br><a href="index.php?task=redirect&id=' . $id . '">Перейти</a></td>';
  74.         $result .= '<tr>';
  75.  
  76.         return $result;
  77.     }
  78.  
  79.     public static function viewMessage($mes)
  80.     {
  81.         ?>
  82.         <div style="background-color: antiquewhite; padding: 10px"><?PHP echo $mes; ?></div>
  83.     <?PHP
  84.     }
  85. }


short.php (сам класс укорачивания)
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. /**
  4.  * @package     Library
  5.  * @subpackage  Url
  6.  * @version     1.0
  7.  * @author      Gold Dragon <illusive@bk.ru>
  8.  * @link        http://gd.lotos-cms.ru
  9.  * @copyright   2000-2015 Gold Dragon
  10.  * @license     MIT License: http://opensource.org/licenses/MIT
  11.  * @date        22.01.2015
  12.  *
  13.  * @description Класс для укорачивания ссылок
  14.  */
  15. class LibShortUrl
  16. {
  17.     /** @var null|object - интерфейс */
  18.     private static $_resource = null;
  19.  
  20.     /**
  21.      * @static Подключение класса
  22.      *
  23.      * @return object
  24.      */
  25.     public static function Init()
  26.     {
  27.         if (!is_object(self::$_resource)) {
  28.             $class_name = __CLASS__;
  29.             self::$_resource = new $class_name;
  30.         }
  31.  
  32.         return self::$_resource;
  33.     }
  34.  
  35.     /**
  36.      * Переход по ссылке и запись в базу данных
  37.      *
  38.      * @param $id
  39.      */
  40.     public function redirectUrl($id)
  41.     {
  42.         $url = GDDatabase::Init()->selectCell("SELECT `original` FROM `#__url` WHERE `id`= ?", $id);
  43.         if(GDDatabase::Init()->selectCell("SELECT `id_url` FROM `#__url_stat` WHERE `id_url` = ? AND `date` = ?", $id, date("Y-m-d"))){
  44.             GDDatabase::Init()->update("UPDATE `#__url_stat` SET `click` = `click` + 1 WHERE `id_url` = ?", $id);
  45.         }else{
  46.             GDDatabase::Init()->insert("INSERT INTO `#__url_stat` (`id_url`, `click`, `date`) VALUES (?,?,?);", $id, 1, date("Y-m-d"));
  47.         }
  48.  
  49.         echo "<script>window.open('" . $url . "','_blank');</script>";
  50.     }
  51.  
  52.     /**
  53.      * Удаление ссылки
  54.      *
  55.      * @param int $id : идентификатор ссылки
  56.      *
  57.      * @return string : оригинальная ссылка
  58.      */
  59.     public function deleteUrl($id)
  60.     {
  61.         $url = GDDatabase::Init()->selectCell("SELECT `original` FROM `#__url` WHERE `id`= ?", $id);
  62.         GDDatabase::Init()->delete("DELETE FROM `#__url` WHERE `id`= ?", $id);
  63.         return $url;
  64.     }
  65.  
  66.     /**
  67.      * Создание короткой ссылки
  68.      *
  69.      * @param string $url  : оригинальная ссылка
  70.      * @param int    $type : тип ссылки
  71.      *                     1 - \d+\.html
  72.      *                     2 - 0*\d+\.html
  73.      *                     3 - [a-z]*\d+\.html
  74.      *                     4 - [a-z]+\.html
  75.      *
  76.      * @return null|string : короткая ссылка
  77.      */
  78.     public function createShortUrl($url = '', $type = 1)
  79.     {
  80.         if (!empty($url)) {
  81.             $check = $this->checkUrl($url);
  82.             if (!empty($check)) {
  83.                 return $this->checkUrl($url);
  84.             } else {
  85.                 $rows = parse_url($url);
  86.                 $scheme = (isset($rows['scheme'])) ? $rows['scheme'] : '';
  87.                 $host = (isset($rows['host'])) ? $rows['host'] : '';
  88.                 $last_id = GDDatabase::Init()->selectCell('SELECT `id` FROM `#__url` ORDER BY `id` DESC') + 1;
  89.                 switch ($type) {
  90.                     case 1:
  91.                     default:
  92.                         $sql = "INSERT INTO `#__url`(`id`, `short`,`original`) VALUES(?,?,?);";
  93.                         GDDatabase::Init()->insert($sql, $last_id, $scheme . '://' . $host . '/' . $last_id, $url);
  94.                 }
  95.  
  96.                 return $scheme . '://' . $host . '/' . $last_id;
  97.             }
  98.         } else {
  99.             return '';
  100.         }
  101.     }
  102.  
  103.     /**
  104.      * Возвращает готовую короткую ссылку
  105.      *
  106.      * @param string $url : оригинальная ссылка
  107.      *
  108.      * @return null|string : короткая ссылка
  109.      */
  110.     public function getShortUrl($url = '')
  111.     {
  112.         return '';
  113.     }
  114.  
  115.     /**
  116.      * Возвращает оригинальную ссылку
  117.      *
  118.      * @param string $url : короткая ссылка
  119.      *
  120.      * @return null|string : оригинальная ссылка
  121.      */
  122.     public function getOriginalUrl($url = '')
  123.     {
  124.         return '';
  125.     }
  126.  
  127.     /**
  128.      * Возвращает количество переходов
  129.      *
  130.      * @param string $url : короткая или оригинальная ссылка
  131.      *
  132.      * @return int
  133.      */
  134.     public function getClickUrl($url = '')
  135.     {
  136.         return 1;
  137.     }
  138.  
  139.     /**
  140.      * @param string $period : период отчёта
  141.      *                       D - за день
  142.      *                       W - за неделю
  143.      *                       M - за месяц
  144.      *
  145.      */
  146.     public function getRedirectUrl($period = '', $year = 0)
  147.     {
  148.  
  149.     }
  150.  
  151.     /**
  152.      * Возвращает все ссылки из таблицы
  153.      *
  154.      * @return array : ссылки из таблицы
  155.      *               [][id]
  156.      *               [][short]
  157.      *               [][original]
  158.      */
  159.     public function getAllUrl()
  160.     {
  161.         $rows = GDDatabase::Init()->select("SELECT * FROM `#__url`");
  162.  
  163.         return $rows;
  164.     }
  165.  
  166.     /**
  167.      * Проверяет существует ли ссылка в баже
  168.      *
  169.      * @param $url : короткая или оригинальная ссылка
  170.      *
  171.      * @return mixed : короткая ссылка или null
  172.      */
  173.     private function checkUrl($url)
  174.     {
  175.         $result = GDDatabase::Init()->selectCell("SELECT `short` FROM `#__url` WHERE `short` = ? OR `original` = ?", $url, $url);
  176.  
  177.         return $result;
  178.     }
  179. }


база данных
CODE (SQL):
скопировать код в буфер обмена
  1. -- Дамп структуры для таблица qqq.gd_url
  2. CREATE TABLE IF NOT EXISTS `gd_url` (
  3.   `id` int(11) NOT NULL,
  4.   `short` varchar(250) DEFAULT NULL,
  5.   `original` varchar(250) DEFAULT NULL,
  6.   PRIMARY KEY (`id`)
  7. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
  8.  
  9. -- Дамп данных таблицы qqq.gd_url: 2 rows
  10. INSERT INTO `gd_url` (`id`, `short`, `original`) VALUES
  11.         (5, 'https://www.google.ru/5', 'https://www.google.ru/search?q=%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0+curl+php&ie=utf-8&oe=utf-8&gws_rd=cr&ei=wq2_VNIdyfjJA_jBgKAM'),
  12.         (3, 'http://forum.php.su/3', 'http://forum.php.su/topic.php?forum=71&topic=16057&postid=1421991474#1421991474'),
  13.         (4, 'http://ruseller.com/4', 'http://ruseller.com/lessons.php?rub=37&id=1187');
  14.  
  15. -- Дамп структуры для таблица qqq.gd_url_stat
  16. CREATE TABLE IF NOT EXISTS `gd_url_stat` (
  17.   `id_url` int(11) DEFAULT NULL,
  18.   `click` int(11) DEFAULT NULL,
  19.   `date` date DEFAULT NULL,
  20.   UNIQUE KEY `id_url` (`id_url`,`date`)
  21. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
  22.  
  23. -- Дамп данных таблицы qqq.gd_url_stat: 0 rows
  24. INSERT INTO `gd_url_stat` (`id_url`, `click`, `date`) VALUES
  25.         (4, 2, '2015-01-23');

(Добавление)
архив полностью тут http://lotos-cms[dot]ru/files/url[dot]qqq[dot]zip
(Добавление)
состав архива:

cache\ - папка для кеширвоания запросов БД
.htaccess - небольшая настройка сервера
gddatabase.php - класс для работы с БД
gddbconfig.ini - настройки БД
gddbdefine.php - некоторые константы
index.php - основной управляющий файл
short.php - класс укорачивания
template.php - класс шаблонов

И соответственно, код не оптимизирован конечно же и безопасность скриптов минимальная

(Отредактировано автором: 23 Января, 2015 - 08:33:26)



-----
Система управления веб-содержимым Lotos CMS
 
 Top
ProSto
Отправлено: 23 Января, 2015 - 10:24:39
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Янв. 2015  


Помог: 0 раз(а)




Спасобо огромное Радость Радость Радость
Сейчас попоробуем
 
 Top
GoDr
Отправлено: 23 Января, 2015 - 14:40:27
Post Id



Посетитель


Покинул форум
Сообщений всего: 446
Дата рег-ции: Янв. 2015  
Откуда: Тамбов


Помог: 17 раз(а)




Попробовали? То?

Если время ещё есть, то можно развить класс


-----
Система управления веб-содержимым Lotos CMS
 
 Top
Страниц (2): « 1 [2]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB