Файл admin.cache.php в Cotonti
Основное назначение файла:
Файл admin.cache.php в движке Cotonti CMF предназначен для управления внутренним кешем системы через административную панель. Это включает в себя функции очистки кеша, удаления отдельных записей из кеша, а также отображение информации о состоянии кеша (например, использование памяти). Этот файл является частью интерфейса для администраторов, предоставляя им инструменты для работы с кешем сайта.
Суть содержания кода:
-
Авторизация и доступ:
- В начале файла проверяется, что доступ к нему осуществляется через административный интерфейс и что у пользователя есть права администратора для выполнения операций с кешем.
-
Инициализация и загрузка данных:
- Загружается шаблон для отображения страницы администрирования кеша с помощью библиотеки
XTemplate. - В пути навигации добавляются ссылки на текущую страницу и другие административные разделы.
- Загружается шаблон для отображения страницы администрирования кеша с помощью библиотеки
-
Работа с кешем:
- Функции управляют кешированием данных, включая очистку кеша (по запросу), удаление отдельных кеш-записей, а также вывод информации о текущем состоянии кеша (например, о его размере, времени истечения и т. д.).
- При этом используется класс
Cache, если кеш доступен в системе, и производится подсчет размера кеша, а также отображение значений из базы данных кеша.
-
Очистка и удаление кеша:
- В случае очистки кеша (
purge) или удаления конкретных кеш-данных (delete), проверяются права на выполнение этих действий и производится очистка кеша или удаление записей. - Записывается сообщение об успешном выполнении операции или ошибка.
- В случае очистки кеша (
-
Работа с плагинами:
- Код использует механизмы плагинов для расширения функциональности, вызывая хуки в ключевых местах (
admin.cache.first,admin.cache.loop,admin.cache.tags), что позволяет сторонним разработчикам добавлять свои собственные действия или интерфейсы в административный раздел кеша.
- Код использует механизмы плагинов для расширения функциональности, вызывая хуки в ключевых местах (
Задачи и условия:
- Отображение информации о кешировании: Информация о состоянии кеша и его содержимом выводится на административной панели для отслеживания использования ресурсов.
- Очистка кеша: Возможность для администратора очистить кеш системы, что может быть полезно для обновлений или исправлений.
- Удаление кеш-записей: Администратор может удалять отдельные записи из кеша по имени.
- Использование памяти: Показана информация о занятой и доступной памяти для кеша.
- Взаимодействие с плагинами: Интеграция с плагинами для гибкости расширения функционала панели управления кешем.
Методы и функции:
-
Методы работы с кешем:
- Функция для очистки кеша:
clear(включая очистку определенных типов кеша). - Функция для очистки всех данных кеша:
clearall. - Функция для удаления кеш-записи по имени:
delete. - Функция для отображения информации о состоянии кеша в памяти.
- Функция для очистки кеша:
-
Работа с шаблонами:
- Используется библиотека шаблонов
XTemplate, чтобы динамически обновлять и отображать данные на странице.
- Используется библиотека шаблонов
-
Работа с плагинами:
cot_getextplugins()— функция для получения плагинов, зарегистрированных на различных этапах работы с кешем.
Характеристика стиля PHP:
- Простой и читаемый стиль: Код написан в классическом стиле PHP с четким разделением на логические блоки (например, управление кешем, отображение данных, обработка плагинов).
- Использование библиотек и фреймворков: Взаимодействие с классами и функциями Cotonti (например,
XTemplate,cot_url,cot_check_xg) предполагает использование фреймворка, что позволяет разработчику не писать низкоуровневый код для каждой операции. - Безопасность и защита: В коде активно используются функции для защиты от атак, такие как проверка на валидность запросов (например,
cot_check_xgдля защиты от CSRF). - Использование хуков и плагинов: Это позволяет добавлять расширения и кастомизировать поведение административной панели кеша без изменения основного кода.
Заключение:
Файл admin.cache.php предоставляет важные функции для управления кешированием в Cotonti, обеспечивая администратору доступ к возможностям очистки и контроля кеша системы. Он использует механизм шаблонов для вывода данных и предоставляет возможность интеграции с плагинами, что расширяет функциональность без изменения основной структуры кода.
<?php
/**
* Administration panel - Internal cache
*
* Панель администратора - Внутренний кеш
*
* @package Cotonti
* @copyright (c) Cotonti Team
* @license https://github.com/Cotonti/Cotonti/blob/master/License.txt
*/
(defined('COT_CODE') && defined('COT_ADMIN')) or die('Wrong URL.');
// Проверка, что файл запрашивается через правильный URL и что это админская страница. Если условие не выполнено, завершается выполнение.
list($usr['auth_read'], $usr['auth_write'], $usr['isadmin']) = cot_auth('admin', 'a');
// Проверка прав доступа пользователя для данного модуля (чтение, запись, администратор).
cot_block($usr['isadmin']);
// Проверка, что у пользователя есть права администратора, в противном случае блокируется доступ.
$t = new XTemplate(cot_tplfile('admin.cache', 'core'));
// Инициализация шаблонизатора для панели администратора с использованием шаблона для кеша.
$adminPath[] = array(cot_url('admin', 'm=other'), $L['Other']);
// Добавление элемента в путь навигации: ссылка на раздел "Other" в админке.
$adminPath[] = array(cot_url('admin', 'm=cache'), $L['adm_internalcache']);
// Добавление элемента в путь навигации: ссылка на раздел "adm_internalcache" в админке.
$adminTitle = $L['adm_internalcache'];
// Установка заголовка страницы для админки на "Internal Cache".
/* === Hook === */
foreach (cot_getextplugins('admin.cache.first') as $pl)
{
include $pl;
// Включение внешних плагинов для расширения функционала на этапе "admin.cache.first".
}
/* ===== */
if (!$cache) {
// Если кеш не был найден или не инициализирован, выполняем его загрузку.
require_once Cot::$cfg['system_dir'] . '/cache.php';
// Подключаем файл, содержащий классы для работы с кешем.
$cache = new Cache();
// Создаем новый объект кеша.
$cache->init();
// Инициализируем кеш.
}
if ($a == 'purge' && $cache) {
// Если действие 'purge' и объект кеша существует.
if (cot_check_xg() && $cache->clear([COT_CACHE_TYPE_DB, COT_CACHE_TYPE_MEMORY])) {
// Проверка X-сессии и попытка очистить кеш для базы данных и памяти.
Cot::$db->update(Cot::$db->users, ['user_auth' => ''], "user_auth <> ''");
// Обновляем таблицу пользователей, сбрасывая поле user_auth, если оно не пустое.
cot_message('adm_purgeall_done');
// Выводим сообщение о завершении очистки кеша.
} else {
cot_error('Error');
// В случае ошибки выводим сообщение об ошибке.
}
} elseif ($a == 'delete') {
// Если действие 'delete' (удаление кеша).
cot_check_xg();
// Проверяем X-сессию.
$name = $db->prep(cot_import('name', 'G', 'TXT'));
// Получаем имя кеша из GET-запроса и обрабатываем его, чтобы предотвратить инъекции.
$db->delete($db_cache, "c_name = '$name'") ? cot_message('adm_delcacheitem') : cot_error('Error');
// Если удаление кеша прошло успешно, выводим сообщение, иначе выводим ошибку.
}
if ($cache && $cache->mem) {
// Проверяем, существует ли объект кеша и поддерживает ли он кеш в памяти.
$info = $cache->get_info();
// Получаем информацию о текущем состоянии кеша.
if ($info['available'] < 0) {
// Если доступный кеш меньше нуля (что может означать ошибку или неинициализированное значение).
$info['available'] = '?';
// Заменяем это значение на вопросительный знак, чтобы отобразить неизвестное количество.
}
$t->assign(array(
// Назначаем переменные для шаблона.
'ADMIN_CACHE_MEMORY_DRIVER' => str_replace('_driver', '', $cache->mem_driver),
// Убираем суффикс '_driver' из названия драйвера кеша.
'ADMIN_CACHE_MEMORY_PERCENTBAR' => ceil(($info['occupied'] / $info['max']) * 100),
// Рассчитываем процент использования памяти и округляем до целого числа.
'ADMIN_CACHE_MEMORY_AVAILABLE' => $info['available'],
// Указываем доступное количество памяти.
'ADMIN_CACHE_MEMORY_MAX' => $info['max']
// Указываем максимальное количество памяти.
));
$t->parse('MAIN.ADMIN_CACHE_MEMORY');
// Парсим шаблон для отображения информации о кешировании в памяти.
}
$sql = $db->query("SELECT * FROM $db_cache WHERE 1 ORDER by c_name ASC");
// Выполняем SQL-запрос для выбора всех данных из таблицы кеша, сортируя их по имени.
$cachesize = 0;
// Инициализируем переменную для подсчета общего размера кеша.
$ii = 0;
// Инициализируем переменную для учета индекса строк в цикле.
$extp = cot_getextplugins('admin.cache.loop');
// Загружаем плагины для обработчиков цикла (если они есть).
foreach ($sql->fetchAll() as $row) {
// Проходим по всем результатам запроса и обрабатываем каждую строку кеша.
$row['c_value'] = htmlspecialchars($row['c_value']);
// Преобразуем значение кеша в безопасный для вывода формат (HTML).
$row['size'] = mb_strlen($row['c_value']);
// Вычисляем размер значения кеша, используя длину строки.
$cachesize += $row['size'];
// Добавляем размер текущего значения кеша к общему размеру кеша.
$t->assign(array(
// Назначаем значения для шаблона.
'ADMIN_CACHE_ITEM_DEL_URL' => cot_url('admin', 'm=cache&a=delete&name='.$row['c_name'].'&'.cot_xg()),
// Формируем URL для удаления кеша по имени.
'ADMIN_CACHE_ITEM_NAME' => $row['c_name'],
// Имя кеша.
'ADMIN_CACHE_REALM' => $row['c_realm'],
// Указываем область (realm) кеша.
'ADMIN_CACHE_EXPIRE' => $row['c_expire'] > 0 ? cot_date('datetime_short', $row['c_expire']) : '-',
// Если срок действия кеша больше нуля, отображаем дату его истечения, иначе ставим "-".
'ADMIN_CACHE_SIZE' => $row['size'],
// Размер кеша.
'ADMIN_CACHE_VALUE' => ($a == 'showall') ? $row['c_value'] : cot_cutstring($row['c_value'], 80),
// Если параметр 'showall', показываем все значение кеша, иначе обрезаем его до 80 символов.
'ADMIN_CACHE_ROW_ODDEVEN' => cot_build_oddeven($ii)
// Генерируем четное или нечетное отображение строки для стилизации.
));
foreach ($extp as $pl) {
// Включаем плагины для обработки данных, если они есть.
include $pl;
}
$t->parse('MAIN.ADMIN_CACHE_ROW');
// Парсим текущую строку для шаблона.
$ii++;
// Увеличиваем счетчик строк.
}
$t->assign(array(
// Назначаем URL для различных действий.
'ADMIN_CACHE_URL_REFRESH' => cot_url('admin', 'm=cache'),
// URL для обновления кеша.
'ADMIN_CACHE_URL_PURGE' => cot_url('admin', 'm=cache&a=purge&'.cot_xg()),
// URL для очистки кеша.
'ADMIN_CACHE_URL_SHOWALL' => cot_url('admin', 'm=cache&a=showall'),
// URL для показа всех значений кеша.
'ADMIN_CACHE_CACHESIZE' => $cachesize
// Общий размер кеша.
));
cot_display_messages($t);
// Отображаем все сообщения для шаблона.
foreach (cot_getextplugins('admin.cache.tags') as $pl) {
// Включаем дополнительные плагины для тегов.
include $pl;
}
$t->parse('MAIN');
// Парсим основной шаблон.
$adminMain = $t->text('MAIN');
// Сохраняем результат парсинга в переменную для дальнейшего использования.
Comments (0)
Content author
Offline
Administrator
Last logged: 2026-07-05 18:32
- Page published: 2025-01-28 15:38
- Last update: 2025-01-28 15:44