ALBIREO CMS
version: 2026.06.01

Отладка кода в Albireo CMS

Вывод произвольных данных

Функция pr() используется для быстрого вывода в браузер любых данных.

pr(getPageData());
pr(SITE_URL);
pr($_COOKIES, BASE_DIR);

Функция обрабатывает данные для безопасного вывода в браузер. Для получение «сырых» отформатированных данных, используйте prMakeStr(), она делает тоже самое, только не выводит данные в браузер:

$out = prMakeStr(getPageData()); 
echo '<div>' . $out . '</div>';

Запись в log-файл

Функция saveLogFile() позволяет записывать произвольные данные в лог-файл. Перед тем, как использовать функцию, следует объявить константу безопасности ALLOW_SAVE_LOGFILE, без неё функция ничего не делает.

// объявить константу безопасности только для локального сервера
if (LOCALHOST) define('ALLOW_SAVE_LOGFILE', '');

// запись в файл любых данных
saveLogFile(BASE_DIR . 'log.txt', getPageData(), SITE_URL, $_POST);

Обратите внимание, что имя файла указывается в полном формате, поэтому функция потенциально небезопасная и предназначена строго для разработчиков для тестирования. На рабочем сайте её не следует использовать (поэтому константа ALLOW_SAVE_LOGFILE используется как дополнительная страховка).

Замеры производительности функции

Для оценки времени выполнения и потребления памяти, используются несколько функций:

  • debugBenchmarkStart('метка') — начало замера
  • debugBenchmarkEnd('метка') — конец замера
  • debugBenchmarkOut()— вывод результата

Перед использованием этих функций следует определить константу DEBUG_BENCHMARK, например в файле website/base-constants.php:

//  включение отладки
define('DEBUG_BENCHMARK', '');

Без константы DEBUG_BENCHMARK фактически замеров не происходит, что позволяет использовать один и тот же код на LOCALHOST и реальным сайте.

// можно вручную определить константу по месту тестирования
# define('DEBUG_BENCHMARK', '');

function myTest() 
{
    // начало замера
    // в качестве метки используем имя функции
    debugBenchmarkStart(__FUNCTION__);
    
    // код, который необходимо измерить
    
    // конец замера
    debugBenchmarkEnd(__FUNCTION__);
}

// выполнение функции
myTest();

// вывод собранной информации
debugBenchmarkOut();

Вывод происходит в браузер примерно в таком виде (время и php-память):

Array
(
   [myTest] => 0.0007
)

0.0129s/0.537Mb

Если по какой-то причине, вывод результата тестирования в браузер нежелателен (например при обработке post-запросов), то вывод можно сохранить в log-файл:

// путь к файлу указывается в полном формате
debugBenchmarkOut(BASE_DIR . 'my-log.txt');

Можно использовать множество меток и их комбинации, которые будут выведены через debugBenchmarkOut() по мере их накопления.

// В коде
debugBenchmarkStart('database_query');
// Выполнение запроса к базе данных
debugBenchmarkEnd('database_query');

debugBenchmarkStart('file_processing');
// Обработка файлов
debugBenchmarkEnd('file_processing', 'processing complete');

// Вывод результатов
debugBenchmarkOut();

Замеры времени выполняются через php-функции hrtime(), а потребление памяти через memory_get_usage() для всего сайта.

Трассировка функций

С помощью трассировки можно отследить цепочку вызова текущей функции. Для этого используется debugTrace(), которая представляет собой оболочку над стандартной php-функцией debug_backtrace().

function myTest() 
{
    debugTrace();
}

При выполнении myTest() появится список php-файлов, функций, которые привели к вызову этой функции:

file: pages/core/debud.php
function: myTest
line: 113

file: system/functions/file/requireSafe.php
function: require
line: 43
    arg 0: core/debud.php
    
...

При необходимости можно ограничить число вызовов:

// только 3 последних вызова функций
debugTrace(3);

Используйте debugTrace() для отслеживания сложных цепочек вызова.

Сбор отладочных данных

Функции debugAdd() и debug() используются для сбора данных для быстрой отладки. Например если нужно отследить значение переменных. Функции автоматически отслеживают последний вызов функции в цепочке вызова.

Функция debug() выводит произвольные данные как есть.

function my1() 
{
    $a = 10;
    $b = 20;
    $c = 30;
    
    debug($a + $b + $c, $a * $b * $c);
}

my1();

Будет вывод в браузер:

#1. my1() from «pages/core/debud.php» (line 163)

1: 60
2: 6000

При необходимости можно добавить другие данные перед использованием debug() с помощью debugAdd():

function my2() 
{
    $a = 10;
    $b = 20;
    $c = 30;
    
    debugAdd($a, $b, $c);
    debug($a + $b + $c, $a * $b * $c);
}

my2();

Результат:

#2. my2() from «pages/core/debud.php» (line 207)

Stack 1: 10
Stack 2: 20
Stack 3: 30

1: 60
2: 6000

Отладочная панель Albireo CMS

Функция debugPanel() используется в шаблоне Albireo CMS и служит для автоматического вывода произвольных данных на сайте.

debugPanel('Произвольное сообщение');
debugPanel(['Адрес сайта' => SITE_URL]);

Для отключения вывода панели используется ключ конфигурации debug:

// вывод панели только для локального сайта
'debug' => LOCALHOST,

С помощью debugPanel() можно выводить любые данные, на которые следует обратить внимание вебмастеру. Например через эту панель будут выводиться сообщения об отсутствующем языковом переводе фраз.