Основное назначение файла и его место в системе
Файл admin.infos.php является частью административной панели Cotonti CMF (Content Management Framework). Его основное назначение — предоставление информации о текущем сервере и его конфигурации для администраторов сайта. Эта информация может включать версии PHP и Zend Engine, тип интерфейса PHP, операционную систему, текущие даты и времена, а также информацию о кэш-драйверах.
Файл находится в папке /system/admin/, что указывает на его роль в административной части системы. Администраторы могут использовать его для диагностики, мониторинга состояния серверной среды, а также для получения информации о версиях используемых технологий.
Суть содержания кода и выполняемые задачи
-
Проверка доступа: Код проверяет, был ли файл вызван в правильном контексте, с проверкой определённых констант (COT_CODE, COT_ADMIN). Если они не определены, выполнение останавливается с ошибкой.
-
Получение прав пользователя: Функция cot_auth используется для получения прав доступа текущего пользователя для администрирования.
-
Шаблонная система: Используется шаблон XTemplate для отображения информации. Код генерирует информацию о сервере, которая затем передается в шаблон для вывода.
-
Получение информации о сервере: В коде используются функции PHP, такие как phpversion, zend_version, php_sapi_name, и другие для получения информации о сервере и PHP. Также выводится информация о текущей дате и времени.
-
Интеграция с плагинами: Код поддерживает хуки (cot_getextplugins), что позволяет интегрировать сторонние плагины в процесс отображения информации.
-
Обработка ошибок: Отключение и восстановление уровня отчёта об ошибках через error_reporting. Это необходимо для того, чтобы избежать появления ошибок на странице в случае возникновения непредвиденных ситуаций.
Список функций и их описание
-
cot_auth():
- Описание: Функция используется для получения прав доступа пользователя в определённой области (в данном случае в админпанели).
- Что делает: Возвращает права доступа для чтения и записи, а также проверяет, является ли пользователь администратором.
-
cot_block():
- Описание: Эта функция блокирует доступ к странице, если у пользователя нет соответствующих прав (права на чтение).
- Что делает: Прерывает выполнение, если текущий пользователь не имеет прав для доступа к странице.
-
cot_tplfile():
- Описание: Функция загружает шаблон для отображения данных.
- Что делает: Возвращает путь к шаблону для админпанели, который затем используется для вывода информации.
-
cot_generate_infotags():
- Описание: Функция генерирует информационные теги для вывода системной информации.
- Что делает: Заполняет шаблон информационными данными, такими как версия PHP, версия Zend, и другие серверные данные.
-
cot_getextplugins():
- Описание: Функция получает и выполняет плагины, связанные с определёнными хуками.
- Что делает: Ищет и подключает плагины для хуков, чтобы расширить функциональность страницы админпанели.
-
cot_date():
- Описание: Функция для форматирования даты.
- Что делает: Преобразует текущую метку времени в читаемый формат, который затем используется в шаблоне.
-
cot_parse():
- Описание: Функция, которая выполняет обработку данных для вывода в шаблон, такие как HTML или BB-код.
- Что делает: Обрабатывает текстовые данные для корректного отображения на странице.
Стиль PHP
-
Использование функционального подхода: Код активно использует функциональный стиль, что видно из частого применения встроенных функций (например, function_exists(), phpversion(), zend_version(), php_sapi_name() и т. д.). Это помогает гарантировать обратную совместимость, избегая ошибок в случае отсутствия необходимых функций.
-
Шаблонный движок: Весь вывод информации осуществляется через шаблонный движок XTemplate, который позволяет легко разделить логику от отображения. Это хороший подход для организации кода.
-
Обработка ошибок: Код использует директиву @error_reporting(0) для временного отключения ошибок и восстанавливает уровень ошибок в конце с помощью @error_reporting(7). Такой подход позволяет избежать вывода ошибок на фронтэнд, улучшая пользовательский опыт в админпанели.
-
Использование хуков для расширяемости: Применение хуков (например, cot_getextplugins('admin.infos.first')) позволяет динамически подключать плагины на различных этапах выполнения, что способствует расширяемости системы и модульности.
-
Проверка условий и fallback: Код тщательно проверяет существование функций или переменных перед их использованием (например, function_exists()), что повышает стабильность работы.
Заключение
Файл admin.infos.php предоставляет администраторам полезную информацию о сервере, что важно для мониторинга и диагностики системы. Он использует стандартные подходы для обработки данных, интеграции с плагинами и отображения через шаблоны. Ключевыми особенностями являются использование функциональных и объектно-ориентированных методов, проверка наличия функций для обеспечения совместимости и продуманное расширение через хуки.
<?php
/**
* Административная панель - Информация о PHP
*
* @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.'); // Проверка на корректность вызова файла (необходимые константы должны быть определены)
list(Cot::$usr['auth_read'], Cot::$usr['auth_write'], Cot::$usr['isadmin']) = cot_auth('admin', 'a'); // Получение прав доступа для текущего пользователя
cot_block(Cot::$usr['auth_read']); // Блокирование доступа, если нет прав на чтение
$t = new XTemplate(cot_tplfile('admin.infos', 'core')); // Инициализация шаблона для страницы администратора (информация о PHP)
$adminPath[] = array(cot_url('admin', 'm=other'), Cot::$L['Other']); // Добавление пути для навигации (страница "Другие" разделы)
$adminPath[] = array(cot_url('admin', 'm=infos'), Cot::$L['adm_infos']); // Добавление текущего пути (страница "Информация")
$adminHelp = Cot::$L['adm_help_versions']; // Установка справочной информации для страницы
$adminTitle = Cot::$L['adm_infos']; // Установка заголовка страницы
/* === Hook === */
foreach (cot_getextplugins('admin.infos.first') as $pl) // Выполнение плагинов на этапе 'first' для страницы
{
include $pl; // Подключение плагинов
}
/* ===== */
@error_reporting(0); // Отключение отчётов об ошибках для временного кода
$t->assign(cot_generate_infotags('ADMIN_INFOS_')); // Присваивание информации о PHP в шаблон
$t->assign(array(
'ADMIN_INFOS_PHPVER' => (function_exists('phpversion')) ? phpversion() : Cot::$L['adm_help_config'], // Получение версии PHP
'ADMIN_INFOS_ZENDVER' => (function_exists('zend_version')) ? zend_version() : Cot::$L['adm_help_config'], // Получение версии Zend Engine
'ADMIN_INFOS_INTERFACE' => (function_exists('php_sapi_name')) ? php_sapi_name() : Cot::$L['adm_help_config'], // Получение интерфейса PHP
'ADMIN_INFOS_CACHEDRIVERS' => (isset($cot_cache_drivers) && is_array($cot_cache_drivers)) ? implode(', ', $cot_cache_drivers) : '', // Получение используемых драйверов кэширования
'ADMIN_INFOS_OS' => (function_exists('php_uname')) ? php_uname() : $L['adm_help_config'], // Получение информации об операционной системе
'ADMIN_INFOS_DATE' => cot_date('datetime_medium', Cot::$sys['now'], false), // Текущая дата и время на сервере
'ADMIN_INFOS_GMDATE' => gmdate('Y-m-d H:i'), // Гринвичское время
'ADMIN_INFOS_GMTTIME' => Cot::$usr['gmttime'], // Время по Гринвичу (для пользователя)
'ADMIN_INFOS_USRTIME' => Cot::$usr['localtime'], // Локальное время пользователя
'ADMIN_INFOS_TIMETEXT' => Cot::$usr['timetext'] // Текстовое представление времени пользователя
));
/* === Hook === */
foreach (cot_getextplugins('admin.infos.tags') as $pl) // Выполнение плагинов на этапе 'tags' для страницы
{
include $pl; // Подключение плагинов
}
/* ===== */
$t->parse('MAIN'); // Применение шаблона
$adminMain = $t->text('MAIN'); // Сохранение сгенерированного контента в переменную
@error_reporting(7); // Включение отчётов об ошибках на обычный уровень
5 минут чтения Administrator