ДоХтор, ну если ты работал через файлы, я так и продолжу:
<?php
// Model
/**
* Создает ссылку.
*
* @param string $href Адрес ссылки.
* @param string $label Текст ссылки.
* @param int $clickLimit Число допустимых кликов по ссылке.
*
* @return array Структура ссылки.
*/
function createLink($href, $label, $clickLimit = 10){
return [
'href' => $href,
'label' => $label,
'currentClicks' => 0,
'clickLimit' => 10,
'added' => time(),
];
}
/**
* Загружает конфигурацию ссылки из файла.
*
* @param string $file Адрес файла, хранящего конфигурацию ссылки.
*
* @return array|null Конфигурация ссылки.
*/
function loadLink($file){
if(!file_exists($file)){
return null;
}
return unserialize(file_get_contents($file));
}
/**
* Сохраняет конфигурацию ссылки в файл.
*
* @param string $file Целевой файл.
*/
function saveLink($file){
file_put_contents(serialize($file));
}
// View
function renderLink(array $link){
return '<a href="' . $link['href'] . '">' . $link['label'] . '</a>';
}
// Controller
function route($regex, callable $handler){
$match = [];
if(preg_match($regex, $_SERVER['REQUEST_URI'], $match) === false){
return $handler($match);
}
return false;
}
?>Использование:
<?php
// Заход на главную страницу
route('/', function(array $match){
// Получаем ссылку или создаем новую
$link = loadLink('test.link');
if(is_null($link)){
$link = createLink('http://site.com?link=test', 'текст', 15);
}
echo renderLink($link);
});
// Заход на страницу со ссылкой
route('?link=test', function(array $match){
$link = loadLink('test.link');
// Если такой ссылки еще нет, просто создаем новую
if(is_null($link)){
$link = createLink('http://site.com?link=test', 'текст', 15);
}
// Если ссылка была создана более дня назад, обновляем ее
elseif(($link['added'] - (new DateTime('+1 day'))->getTimestamp()) < time()){
$link = createLink('http://site.com?link=test', 'текст', 15);
}
// Сохраняем и отображаем ссылку
$link['currentClicks']++;
saveLink($link);
echo renderLink($link);
});
?>Не знаю, рабочий ли это код, но надеюсь смысл будет понятен.