Как анализировать PHP код Moodle при обучении
Основные способы просмотра PHP кода в Moodle
Как наиболее эффективно просмотреть выполнение PHP кода Moodle?
Наиболее эффективный способ - включить режим разработчика Moodle и использовать встроенные функции отладки. Это позволяет видеть переменные, ошибки и стек вызовов непосредственно на странице.
Настройка:
- Открыть файл
config.phpв корне Moodle. - Добавить строки после установки
$CFG:
$CFG->debug = (E_ALL | E_STRICT); // выводить все ошибки
$CFG->debugdisplay = 1; // показывать на экране
$CFG->debugsmtp = 1; // лог SMTP
$CFG->perfdebug = 15; // статистика производительности
$CFG->debugpageinfo = 1; // информация о страницеView php moodle (просмотр moodle php)
Также можно использовать функцию print_object($var) или var_dump($var) внутри плагина или темы для вывода содержимого переменных.
Типичные проблемы:
- Ошибки не отображаются из-за кэширования - очистить кэш в админке или удалить файлы в
moodledata/cache. - После включения debugdisplay сайт может стать медленнее - использовать только на тестовых серверах.
- Пользователи видят ошибки - отключить debugdisplay в продакшене.
Как посмотреть сгенерированный HTML код страницы Moodle?
Используйте браузерные инструменты: правая кнопка мыши - «Просмотреть код страницы» или F12. Вы увидите HTML, CSS и JavaScript, которые PHP отправил клиенту. Это полезно для анализа структуры, но не показывает сам PHP код.
Проблема: некоторые элементы генерируются динамически через JavaScript - требуется просмотр через инспектор элементов после полной загрузки.
Как выполнить пошаговую отладку PHP кода Moodle с помощью xdebug?
Установите xdebug на сервер, настройте IDE (например, PhpStorm) для приёма отладочных соединений. В файле config.php добавьте:
$CFG->xdebug = 1; // включить поддержку xdebug (Moodle 4.0+)
Установите точки останова в IDE и запустите страницу. Выполнение остановится на заданной строке.
Проблема: xdebug не останавливается - проверьте настройки IDE, наличие расширения xdebug, параметр remote_autostart. Также возможно вмешательство reverse proxy.
Как просмотреть исходные PHP файлы Moodle на сервере?
Подключитесь по SSH или используйте файловый менеджер хостинга. Файлы находятся в корневой папке Moodle: /var/www/moodle. Структура каталогов соответствует компонентам: lib/, mod/, blocks/, course/ и т.д. Просматривайте файлы с помощью редактора или команды cat.
ssh user@server
cd /var/www/moodle
cat mod/forum/index.php | head -50
Проблема: нет доступа к серверу - используйте локальную копию Moodle из Git или архива.
Как создать собственный блок для вывода PHP данных?
Разработайте простой блок Moodle, который выводит содержимое переменных. Например, создайте файл blocks/mytest/block_mytest.php:
<?php
class block_mytest extends block_base {
public function init() {
$this->title = get_string('pluginname', 'block_mytest');
}
public function get_content() {
global $DB, $USER;
$this->content->text = 'Текущий пользователь: ' . fullname($USER) . '<br>';
$courses = $DB->get_records('course', null, 'id', 'id, fullname', 0, 5);
$this->content->text .= 'Последние курсы: ' . print_object($courses, true);
return $this->content;
}
}
Установите блок через админку и разместите на странице. Вы увидите вывод PHP данных.
Проблема: блок не отображается - проверьте права доступа, кэш контекста, наличие файла db/access.php.
Расширенные примеры просмотра PHP кода Moodle
Пример 1: Полная конфигурация отладки в config.php
// Включение всех видов отладки Moodle
$CFG->debug = E_ALL | E_STRICT;
$CFG->debugdisplay = 1;
$CFG->debugsmtp = 1;
$CFG->perfdebug = 15;
$CFG->debugpageinfo = 1;
$CFG->debugvalidators = 1;
$CFG->debugdeveloper = 1; // дополнительная отладочная информация для разработчиков
Результат: на каждой странице Moodle внизу появится панель отладки с информацией о времени выполнения, запросах к БД, включенных темах и т.д.
Пример 2: Использование print_object в скрипте CLI
#!/usr/bin/env php
<?php
require_once('/var/www/moodle/config.php');
global $DB;
$courses = $DB->get_records('course', array('visible' => 1), 'fullname', 'id, fullname, shortname');
echo "Количество видимых курсов: " . count($courses) . "\n";
print_object($courses);
Результат: выводит массив объектов курсов с ID, полными названиями и короткими именами в отформатированном виде.
Пример 3: Настройка xdebug для Moodle в PhpStorm
В config.php добавьте:
$CFG->xdebug = 1;
Файл php.ini (или .user.ini):
[xdebug]
zend_extension=xdebug.so
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.client_host=127.0.0.1
xdebug.client_port=9003
xdebug.idekey=PHPSTORM
xdebug.log=/tmp/xdebug.log
Результат: при запуске страницы в браузере с параметром XDEBUG_SESSION_START=PHPSTORM IDE перехватывает выполнение и останавливается на точках останова.
Пример 4: Просмотр шаблонов Mustache и их PHP контекста
Создайте файл темы /theme/yourtheme/templates/mytest.mustache:
<div>
<h2>{{title}}</h2>
<p>{{description}}</p>
</div>
В PHP (например, в lib.php темы):
$data = ['title' => 'Тестовый заголовок', 'description' => 'Описание из шаблона'];
echo $OUTPUT->render_from_template('theme_yourtheme/mytest', $data);
Результат: на странице выведется HTML с подставленными данными. Чтобы просмотреть, какие данные передаются в шаблон, можно временно вывести $data с помощью var_dump.
Пример 5: Использование get_string и debugging для просмотра языковых строк
$string = get_string('modulename', 'mod_forum');
echo "Строка: " . $string . "\n";
if (debugging('', DEBUG_DEVELOPER)) {
echo "Значение из langconfig: " . get_string('thislanguage', 'langconfig');
}
Результат: выводит локализованную строку "Форум" и дополнительную отладочную информацию.