Посетитель
Покинул форум
Сообщений всего: 446
Дата рег-ции: Янв. 2015
Откуда: Тамбов
Помог: 17 раз(а)
да уж... срок огромный
В общем чуть-чуть сделал. Времени не так уж много (семья, дети, работа
)
что сделал:
- ссылки укорачиваются, но только по одному правилу
- ссылки удаляются
- переадресация
- подсчёт переходов
Часть кода (остальное в архиве):
index.php
PHP:
скопировать код в буфер обмена
<?PHP
// Подключаем класс для работы с БД и заодно языковые настройки
require_once ( 'gddbdefine.php' ) ;
require_once ( 'gddatabase.php' ) ;
// Подключаем библиотеку укорачивания ссылок
require_once ( 'short.php' ) ;
// Подключаем класс шаблонов
require_once ( 'template.php' ) ;
// На всякий случай будем обрабатывать исключения
try {
// Получаем задачу
$task = ( isset ( $_REQUEST [ 'task' ] ) ) ?
$_REQUEST [ 'task' ] : '' ;
switch ( $task ) {
// переход по ссылки
case 'redirect' :
$id = ( isset ( $_REQUEST [ 'id' ] ) ) ?
$_REQUEST [ 'id' ] : 0 ; LibShortUrl:: Init ( ) -> redirectUrl ( $id ) ;
echo "<script>window.location='" . _GDDB_PATH_SITE. "'</script>" ;
break ;
// удаление ссылок
case 'delete' :
$id = ( isset ( $_REQUEST [ 'id' ] ) ) ?
$_REQUEST [ 'id' ] : 0 ; fDefault( Template:: viewMessage ( 'Ссылка ' . LibShortUrl:: Init ( ) -> deleteUrl ( $id ) . ' удалена' ) ) ;
break ;
// создание новой ссылки
case 'create' :
$url = ( isset ( $_REQUEST [ 'url' ] ) ) ?
$_REQUEST [ 'url' ] : '' ; fDefault( Template:: viewMessage ( 'Создана короткая ссылка: ' . LibShortUrl:: Init ( ) -> createShortUrl ( $url ) ) ) ;
break ;
// вывод по умолчанию начальной страницы
default :
fDefault( ) ;
}
} catch ( Exception $e ) {
echo '<div style="color:#f00">' ;
echo '<i>Ошибка: </i>' . $e -> getMessage ( ) . '<br>' ;
echo '<i>Файл: </i>' . $e -> getFile ( ) . '<br>' ;
echo '<i>Строка: </i>' . $e -> getLine ( ) ;
echo '<pre>' . $e -> getTraceAsString ( ) . '</pre>' ;
echo '</div>' ;
}
function fDefault( )
{
$link = '' ;
$rows = LibShortUrl:: Init ( ) -> getAllUrl ( ) ;
foreach ( $rows as $value ) {
$links [ ] = Template:: getInputLink ( $value [ 'id' ] , $value [ 'short' ] , $value [ 'original' ] ) ;
}
$link .= '<table>' ;
$link .= '<tr><th>Короткий URL</th><th>Длинный URL</th><th>Действие</th></tr>' ;
$link .= '<tr>' . implode ( '' , $links ) . '</tr>' ; $link .= '</table>' ;
}
Template:: pageDefault ( $link ) ;
}
template.php (Класс шаблона)
PHP:
скопировать код в буфер обмена
<?PHP
/**
* @package Template
* @version 1.0
* @author Gold Dragon <illusive@bk.ru>
* @link http://gd.lotos-cms.ru
* @copyright 2000-2015 Gold Dragon
* @license MIT License: http://opensource.org/licenses/MIT
* @date 22.01.2015
*
* @description Класс шаблона
*/
class Template
{
/**
* Основной шаблон страницы
*
* @param string $content : контент
* @param string $message : информационное сообщение
*/
private static function pageBody( $content , $message = '' )
{
?>
<!doctype html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Укоротитель ссылок</title>
<style>
td, th {
border: 1px #999 solid;
padding: 5px;
}
</style>
</head>
<body>
<?PHP echo $message ; ?>
<?PHP echo $content ; ?>
</body>
</html>
<?PHP
}
/**
* Главная страница
*
* @param string $links : ссылки которые уже в базе
*/
public static function pageDefault( $links = '' )
{
?>
<h2>Укоротить URL</h2>
<form action="" method="post">
<label>Ссылка: <input type="text" size="70" name="url" placeholder="Введите URL для сокращения"/></label>
<input name="task" type="hidden" value="create"/>
<input type="submit" name="save" value="Укоротить"/>
</form>
<h3>Существующие ссылки:</h3>
<?PHP echo $links ; ?>
<?PHP
self :: pageBody ( $content ) ;
}
public static function getInputLink( $id , $short , $original )
{
$result = '<tr>' ;
$result .= '<td>' . $short . '</td><td>' . $original . '</td>' ;
$result .= '<td><a href="index.php?task=delete&id=' . $id . '">Удалить</a><br><a href="index.php?task=redirect&id=' . $id . '">Перейти</a></td>' ;
$result .= '<tr>' ;
return $result ;
}
public static function viewMessage( $mes )
{
?>
<div style="background-color: antiquewhite; padding: 10px"><?PHP echo $mes ; ?> </div>
<?PHP
}
}
short.php (сам класс укорачивания)
PHP:
скопировать код в буфер обмена
<?PHP
/**
* @package Library
* @subpackage Url
* @version 1.0
* @author Gold Dragon <illusive@bk.ru>
* @link http://gd.lotos-cms.ru
* @copyright 2000-2015 Gold Dragon
* @license MIT License: http://opensource.org/licenses/MIT
* @date 22.01.2015
*
* @description Класс для укорачивания ссылок
*/
class LibShortUrl
{
/** @var null|object - интерфейс */
private static $_resource = null ;
/**
* @static Подключение класса
*
* @return object
*/
public static function Init( )
{
$class_name = __CLASS__ ;
self :: $_resource = new $class_name ;
}
return self :: $_resource ;
}
/**
* Переход по ссылке и запись в базу данных
*
* @param $id
*/
public function redirectUrl( $id )
{
$url = GDDatabase:: Init ( ) -> selectCell ( "SELECT `original` FROM `#__url` WHERE `id`= ?" , $id ) ;
if ( GDDatabase
:: Init ( ) -> selectCell ( "SELECT `id_url` FROM `#__url_stat` WHERE `id_url` = ? AND `date` = ?" , $id , date ( "Y-m-d" ) ) ) { GDDatabase:: Init ( ) -> update ( "UPDATE `#__url_stat` SET `click` = `click` + 1 WHERE `id_url` = ?" , $id ) ;
} else {
GDDatabase
:: Init ( ) -> insert ( "INSERT INTO `#__url_stat` (`id_url`, `click`, `date`) VALUES (?,?,?);" , $id , 1
, date ( "Y-m-d" ) ) ; }
echo "<script>window.open('" . $url . "','_blank');</script>" ;
}
/**
* Удаление ссылки
*
* @param int $id : идентификатор ссылки
*
* @return string : оригинальная ссылка
*/
public function deleteUrl( $id )
{
$url = GDDatabase:: Init ( ) -> selectCell ( "SELECT `original` FROM `#__url` WHERE `id`= ?" , $id ) ;
GDDatabase:: Init ( ) -> delete ( "DELETE FROM `#__url` WHERE `id`= ?" , $id ) ;
return $url ;
}
/**
* Создание короткой ссылки
*
* @param string $url : оригинальная ссылка
* @param int $type : тип ссылки
* 1 - \d+\.html
* 2 - 0*\d+\.html
* 3 - [a-z]*\d+\.html
* 4 - [a-z]+\.html
*
* @return null|string : короткая ссылка
*/
public function createShortUrl( $url = '' , $type = 1)
{
$check = $this -> checkUrl ( $url ) ;
return $this -> checkUrl ( $url ) ;
} else {
$scheme = ( isset ( $rows [ 'scheme' ] ) ) ?
$rows [ 'scheme' ] : '' ; $host = ( isset ( $rows [ 'host' ] ) ) ?
$rows [ 'host' ] : '' ; $last_id = GDDatabase:: Init ( ) -> selectCell ( 'SELECT `id` FROM `#__url` ORDER BY `id` DESC' ) + 1 ;
switch ( $type ) {
case 1:
default :
$sql = "INSERT INTO `#__url`(`id`, `short`,`original`) VALUES(?,?,?);" ;
GDDatabase:: Init ( ) -> insert ( $sql , $last_id , $scheme . '://' . $host . '/' . $last_id , $url ) ;
}
return $scheme . '://' . $host . '/' . $last_id ;
}
} else {
return '' ;
}
}
/**
* Возвращает готовую короткую ссылку
*
* @param string $url : оригинальная ссылка
*
* @return null|string : короткая ссылка
*/
public function getShortUrl( $url = '' )
{
return '' ;
}
/**
* Возвращает оригинальную ссылку
*
* @param string $url : короткая ссылка
*
* @return null|string : оригинальная ссылка
*/
public function getOriginalUrl( $url = '' )
{
return '' ;
}
/**
* Возвращает количество переходов
*
* @param string $url : короткая или оригинальная ссылка
*
* @return int
*/
public function getClickUrl( $url = '' )
{
return 1 ;
}
/**
* @param string $period : период отчёта
* D - за день
* W - за неделю
* M - за месяц
*
*/
public function getRedirectUrl( $period = '' , $year = 0 )
{
}
/**
* Возвращает все ссылки из таблицы
*
* @return array : ссылки из таблицы
* [][id]
* [][short]
* [][original]
*/
public function getAllUrl( )
{
$rows = GDDatabase:: Init ( ) -> select ( "SELECT * FROM `#__url`" ) ;
return $rows ;
}
/**
* Проверяет существует ли ссылка в баже
*
* @param $url : короткая или оригинальная ссылка
*
* @return mixed : короткая ссылка или null
*/
private function checkUrl( $url )
{
$result = GDDatabase:: Init ( ) -> selectCell ( "SELECT `short` FROM `#__url` WHERE `short` = ? OR `original` = ?" , $url , $url ) ;
return $result ;
}
}
база данных
CODE (
SQL ):
скопировать код в буфер обмена
-- Дамп структуры для таблица qqq.gd_url
CREATE TABLE IF NOT EXISTS `gd_url` (
`id` int( 11) NOT NULL ,
`short` varchar( 250) DEFAULT NULL ,
`original` varchar( 250) DEFAULT NULL ,
PRIMARY KEY ( `id` )
) ENGINE= MyISAM DEFAULT CHARSET= utf8;
-- Дамп данных таблицы qqq.gd_url: 2 rows
INSERT INTO `gd_url` ( `id` , `short` , `original` ) VALUES
( 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' ) ,
( 3 , 'http://forum.php.su/3' , 'http://forum.php.su/topic.php?forum=71&topic=16057&postid=1421991474#1421991474' ) ,
( 4 , 'http://ruseller.com/4' , 'http://ruseller.com/lessons.php?rub=37&id=1187' ) ;
-- Дамп структуры для таблица qqq.gd_url_stat
CREATE TABLE IF NOT EXISTS `gd_url_stat` (
`id_url` int( 11) DEFAULT NULL ,
`click` int( 11) DEFAULT NULL ,
`date` date DEFAULT NULL ,
UNIQUE KEY `id_url` ( `id_url` , `date` )
) ENGINE= MyISAM DEFAULT CHARSET= utf8;
-- Дамп данных таблицы qqq.gd_url_stat: 0 rows
INSERT INTO `gd_url_stat` ( `id_url` , `click` , `date` ) VALUES
( 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