Основное назначение файла и его место в системе:
Файл admin.phpinfo.php в движке Cotonti CMF отвечает за отображение информации о конфигурации PHP на сервере в административной панели. Это позволяет администраторам просматривать подробности о текущей настройке PHP (например, версии, модули, параметры и т. д.). Обычно такие данные полезны для диагностики и конфигурирования серверной среды.
Место в системе: Файл находится в административной части движка Cotonti и доступен через панель управления. Он является частью администрирования системы, обеспечивая доступ к важной информации о сервере, на котором работает сайт.
Суть содержания кода:
-
Проверка прав доступа: Код проверяет, что текущий пользователь имеет административные права (чтение и запись). Если это не так, доступ к странице блокируется.
-
Создание и настройка шаблона страницы: Используется система шаблонов XTemplate для отображения информации. Настраивается путь навигации (breadcrumbs), который отображает текущую страницу "PHP" в контексте общей административной панели.
-
Получение и очистка информации о конфигурации PHP: С помощью функции phpinfo() собирается информация о конфигурации PHP. Затем она очищается от ненужных HTML-элементов, чтобы на странице отображалась только нужная информация.
-
Использование хуков: В коде предусмотрено место для подключаемых плагинов, которые могут расширить функциональность или изменить вывод страницы.
Список используемых функций:
-
cot_auth()
- Назначение: Проверяет права доступа для текущего пользователя.
- Описание: Возвращает права доступа для определенного раздела системы, в данном случае для администраторского раздела. Функция возвращает массив прав (чтение, запись и админские права).
-
cot_block()
- Назначение: Блокирует выполнение кода, если указанный параметр имеет значение
false.
- Описание: В данном случае блокирует выполнение кода, если у пользователя нет прав на чтение (в результате проверки через
cot_auth).
-
cot_tplfile()
- Назначение: Получает путь к файлу шаблона.
- Описание: Генерирует путь к шаблону, который будет использован для отображения страницы. В данном случае загружается шаблон для страницы с информацией о PHP.
-
cot_url()
- Назначение: Формирует URL для перехода в другие разделы административной панели.
- Описание: Используется для формирования правильных URL для навигации в административной панели, например, для перехода на страницы "Other" и "PHP".
-
cot_getextplugins()
- Назначение: Получает список плагинов, зарегистрированных для выполнения определенных действий (например, хуков).
- Описание: В данном случае используется для получения плагинов, которые могут подключать дополнительные данные или расширять функциональность на странице (например, добавление информации через хуки).
-
ob_start(), ob_get_clean(), ob_implicit_flush()
- Назначение: Работа с буфером вывода.
- Описание: Функции включают буферизацию вывода, что позволяет захватывать вывод функции
phpinfo() и модифицировать его перед выводом на экран.
-
preg_replace()
- Назначение: Выполняет поиск и замену по регулярному выражению.
- Описание: Используется для удаления лишних HTML-тегов из вывода функции
phpinfo(), таких как теги DOCTYPE, head, html, а также теги body и html.
-
str_replace()
- Назначение: Выполняет замену подстрок в строках.
- Описание: Заменяет теги
<body>, </body>, </html> на пустую строку, очищая вывод от ненужных элементов HTML.
-
$t->assign()
- Назначение: Присваивает значения переменным шаблона.
- Описание: Используется для передачи данных из PHP в шаблон. В данном случае передает очищенную информацию о конфигурации PHP.
-
$t->parse()
- Назначение: Парсит и обрабатывает шаблон.
- Описание: Выполняет обработку шаблона и подготавливает его для вывода.
-
$t->text()
- Назначение: Извлекает текстовое содержимое из шаблона.
- Описание: Извлекает сгенерированный HTML-код из шаблона и сохраняет его в переменную для дальнейшего использования.
Взаимодействие с классами и объектами:
-
XTemplate:
- Работает с объектом шаблона
XTemplate, который управляет загрузкой и обработкой шаблонов. Этот класс используется для создания интерфейса страницы и вставки данных в шаблон.
-
cot_url:
- Это глобальная функция, которая используется для создания URL для навигации внутри административной панели.
-
cot_getextplugins:
- Функция, которая позволяет подключать дополнительные плагины для расширения функциональности в различных частях системы. В данном случае она используется для внедрения плагинов в хуки страницы (например, для изменения содержимого).
Характеристика стиля PHP:
-
Ориентированность на функции: Код использует функции для выполнения различных задач, таких как проверка прав доступа (cot_auth), работа с шаблонами (XTemplate), обработка данных вывода (preg_replace, str_replace).
-
Чистота кода: Код хорошо структурирован, с ясным разделением ответственности для каждого фрагмента. Используются комментарии для объяснения ключевых шагов.
-
Использование хуков и плагинов: Механизм хуков и плагинов активно используется для обеспечения расширяемости. Это позволяет сторонним разработчикам добавлять функциональность без изменения основного кода.
-
Принципы безопасности: В коде используется проверка прав доступа для предотвращения несанкционированного доступа к панели. Также есть защита от выполнения кода с неправильного URL (defined('COT_CODE') && defined('COT_ADMIN')).
-
Буферизация вывода: Применяется буферизация вывода для захвата и модификации вывода функции phpinfo(). Это позволяет очистить результат и выводить только нужные данные, избегая лишнего HTML.
-
Подход к совместимости: Использование регулярных выражений для очистки вывода PHP-информации указывает на внимание к совместимости вывода в разных окружениях.
<?php
/**
* Administration panel - PHP Infos
*
* @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(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.phpinfo', 'core')); // Создание экземпляра XTemplate для шаблона страницы информации о PHP
$adminPath[] = [cot_url('admin', 'm=other'), Cot::$L['Other'],]; // Добавление пути навигации "Other"
$adminPath[] = [cot_url('admin', 'm=phpinfo'), 'PHP',]; // Добавление пути навигации "PHP" в административной панели
$adminTitle = Cot::$L['adm_phpinfo']; // Название страницы админпанели "PHP Information"
// Запуск буфера вывода
ob_start();
ob_implicit_flush(false); // Отключение неявного вывода
phpinfo(); // Получение полной информации о конфигурации PHP
$result = ob_get_clean(); // Чтение содержимого из буфера и очистка буфера
// Удаление ненужных HTML-тегов и чистка вывода
$result = preg_replace('/\s?<!DOCTYPE[^>]*?>\s?/si', '', $result); // Удаление DOCTYPE
$result = preg_replace('/\s?<head[^>]*?>.*?<\/head>\s?/si', '', $result); // Удаление секции head
$result = preg_replace('/\s?<html[^>]*?>\s?/si', '', $result); // Удаление тега html
$result = str_replace(['<body>', '</body>', '</html>'], '', $result); // Удаление тела и заключающего HTML
$t->assign(array(
'ADMIN_PHPINFO' => $result, // Присваивание очищенного результата в переменную шаблона для отображения
));
/* === Hook === */
foreach (cot_getextplugins('admin.infos.tags') as $pl) { // Включение плагинов для хуков
include $pl; // Подключение плагинов
}
/* ===== */
$t->parse('MAIN'); // Обработка шаблона "MAIN"
$adminMain = $t->text('MAIN'); // Извлечение и присваивание содержимого шаблона в переменную $adminMain
5 минут чтения Administrator