Файл debug.php в Cotonti
Файл debug.php в системной папке Cotonti CMF предназначен для организации удобных механизмов отладки и логирования, позволяя разработчикам выводить подробную информацию о текущем состоянии переменных, стека вызовов и других аспектов выполнения программы.
Основные функции и их назначение:
-
cot_print()— Эта функция принимает несколько переменных и выводит их значения в форматеvar_dump(), что позволяет детально увидеть тип и содержимое каждой переменной. После вывода данных выполнение скрипта завершается с помощьюdie(). Это используется для быстрой отладки, чтобы понять, что содержат переменные на определенном этапе выполнения кода. -
cot_watch()— Записывает текущее состояние переданных переменных в файл лога. При этом информация о вызове функции (имя файла и номер строки) также записывается. Это используется для того, чтобы сохранять информацию о переменных для дальнейшего анализа без остановки выполнения скрипта. -
cot_backtrace()— Выводит стек вызовов (backtrace), который помогает отследить путь выполнения программы до точки вызова. Это полезно, если нужно понять, как и откуда был вызван код. -
cot_vardump()— Печатает структуру и содержимое всех глобальных переменных, которые доступны в текущей области видимости. Это помогает разработчикам увидеть все переменные, включая глобальные, и оценить их состояние. -
COT_VARDUMP_LOCALS— Макрос, который выводит все локальные переменные в текущей области видимости, с исключением некоторых служебных переменных. Это помогает получить подробное представление о текущем контексте выполнения скрипта. -
cot_checkpoint()— Записывает в лог-файл текущее состояние всех глобальных переменных, а также информацию о том, где именно в коде был вызван этот процесс (имя файла и строка). Это полезно для отладки в реальном времени, особенно когда важно сохранить информацию о переменных на определенном этапе выполнения. -
COT_CHECKPOINT_LOCALS— Макрос, который записывает в лог файл текущее состояние всех локальных переменных в области видимости с исключением некоторых служебных переменных. Это помогает отслеживать изменения переменных в ходе выполнения кода.
Стиль PHP:
-
Глобальные переменные:
- В коде активно используются глобальные переменные, такие как
$cfg,$GLOBALSи другие. Это типичный подход для работы с конфигурациями или состоянием системы в более старых или простых системах.
- В коде активно используются глобальные переменные, такие как
-
Отладочные функции:
- Функции типа
var_dump(),print_r()иdebug_backtrace()являются стандартными средствами для отладки в PHP, и их использование здесь помогает разработчикам получить подробную информацию о значениях переменных и о контексте вызовов.
- Функции типа
-
Использование
ob_end_clean():- Это стандартный прием в PHP для очистки вывода перед тем, как вывести отладочную информацию. Он предотвращает появление лишних данных, если вывод был уже начат.
-
Запись в файл:
- В нескольких местах используется запись информации в лог-файл с уникальными именами, содержащими дату и время. Это позволяет отслеживать состояние системы на протяжении времени и восстанавливать последовательность событий.
-
Макросы:
- Использование
defineдля создания макросов, таких какCOT_VARDUMP_LOCALSиCOT_CHECKPOINT_LOCALS, позволяет вставлять отладочный код в различных частях приложения, без необходимости многократного написания однотипного кода.
- Использование
Характеристика стиля кода:
- Простота и ясность: Код написан в легком для понимания стиле. Он использует стандартные функции PHP для отладки, записи в файл и получения стека вызовов.
- Минимизация ошибок: Через использование функции записи в лог и различных макросов система предоставляет механизмы для детальной диагностики, что позволяет легко отслеживать ошибки на разных этапах выполнения.
- Гибкость: Код позволяет настраивать вывод отладочной информации в зависимости от условий, например, с помощью флагов типа
$clear_screen, а также создает уникальные имена для файлов логов, чтобы сохранить все логи.
В целом, файл debug.php реализует набор полезных инструментов для отладки и мониторинга работы системы, позволяя разработчикам получать детальную информацию о переменных, стеке вызовов и текущем состоянии кода, что важно для поиска ошибок и улучшения производительности.
В файле debug.php в системной папке Cotonti CMF содержатся следующие функции:
-
cot_print()
Печатает значения переданных переменных с использованиемvar_dump()и завершает выполнение скрипта. -
cot_watch()
Записывает текущее состояние переданных переменных и стека вызовов в лог-файл и продолжает выполнение скрипта. -
cot_backtrace()
Выводит стек вызовов программы, позволяя отследить путь выполнения кода до текущей точки. -
cot_vardump()
Печатает структуру и содержимое всех глобальных переменных, доступных в текущей области видимости. -
COT_VARDUMP_LOCALS(макрос)
Макрос, который выводит структуру и содержимое всех локальных переменных в текущей области видимости. -
cot_checkpoint()
Записывает текущее состояние всех глобальных переменных в лог-файл и продолжает выполнение скрипта. -
COT_CHECKPOINT_LOCALS(макрос)
Макрос, который записывает текущее состояние всех локальных переменных в лог-файл и продолжает выполнение скрипта.
Эти функции и макросы предназначены для отладки и логирования состояния переменных и других параметров во время работы приложения.
/**
* Debugging Facilities
*
* @package API - Debugging
* @copyright (c) Cotonti Team
* @license https://github.com/Cotonti/Cotonti/blob/master/License.txt
*/
// Проверка, был ли файл вызван через систему Cotonti. Если нет, прекращаем выполнение.
defined('COT_CODE') or die('Wrong URL');
// Установка уровня отчетности об ошибках. Все ошибки, кроме NOTICE, будут показываться.
error_reporting(E_ALL ^ E_NOTICE);
// Включаем отображение ошибок на экране.
ini_set('display_errors', 1);
/**
* Принимает несколько переменных и выводит их значения в режиме отладки (с помощью var_dump).
*
* @example cot_assert($foo, $bar);
* @see cot_watch(), cot_backtrace(), cot_vardump()
*/
function cot_print() // Объявление функции cot_print, которая выводит значения переданных переменных.
{
ob_end_clean(); // Очищаем выходной буфер и завершаем его, чтобы не было лишних выводов перед использованием функции.
$vars = func_get_args(); // Получаем все аргументы, переданные в функцию, и сохраняем их в массив $vars.
foreach ($vars as $name => $var) // Перебираем все переданные переменные.
{
var_dump($var); // Выводим информацию о переменной в формате var_dump (тип, значение и другие данные).
}
die(); // Завершаем выполнение скрипта сразу после вывода переменных, чтобы ничего не продолжало выполняться.
}
Описание:
-
Проверка правильности вызова файла: В самом начале используется проверка через
defined('COT_CODE')для того, чтобы убедиться, что файл вызван из правильного контекста системы Cotonti. Если условие не выполняется (то есть файл был вызван напрямую), выполнение скрипта будет остановлено черезdie('Wrong URL'). -
Настройка отчетности об ошибках: Функция
error_reporting(E_ALL ^ E_NOTICE)настраивает отчетность об ошибках, показывая все ошибки, кроме уведомленийE_NOTICE. Это полезно для отладки, так какE_NOTICEчасто выводит незначительные уведомления, которые могут быть полезны в процессе разработки, но мешают на стадии отладки. Включениеini_set('display_errors', 1)заставляет PHP отображать эти ошибки непосредственно в браузере. -
Основная функция отладки -
cot_print(): Эта функция принимает переменные, переданные ей в виде аргументов. Она очищает выходной буфер черезob_end_clean()(это позволяет избежать лишнего вывода перед использованием этой функции), затем выводит каждую переменную черезvar_dump()и завершает выполнение скрипта с помощьюdie(). Это гарантирует, что после вывода данных выполнение скрипта не продолжится.
В коде используется типичная для отладки практика вывода данных с помощью var_dump, что помогает разработчику анализировать структуру данных в процессе отладки.
/**
* Записывает текущее состояние своих аргументов в файл лога отладки и продолжает нормальное выполнение скрипта.
*
* @global string $cfg['debug_logpath'] Путь к файлу лога отладки
* @example cot_watch($foo, $bar);
* @see cot_assert(), cot_checkpoint()
*/
function cot_watch() // Объявление функции cot_watch, которая записывает состояние своих аргументов в файл лога отладки.
{
global $cfg; // Делаем доступной глобальную переменную $cfg, которая содержит конфигурационные данные.
// Открываем файл для записи в режиме "добавить в конец файла" (a) в путь, указанный в конфигурации.
// Формируем имя файла, добавляя текущую дату и время для уникальности (Ymd_His).
$fp = fopen($cfg['debug_logpath'] . '/cot_debug_' . date('Ymd_His') . '.log', 'a');
$btrace = debug_backtrace(); // Получаем стек вызовов функций, чтобы записать место в коде, где была вызвана эта функция.
// Записываем в файл имя файла и строку, где был вызван код, используя данные из стека вызова.
fputs($fp, $btrace[0]['file'].', '.$btrace[0]['line'].":\n");
// Получаем все аргументы, переданные в функцию, и начинаем их обработку.
$vars = func_get_args();
foreach ($vars as $name => $var) // Перебираем все переданные переменные.
{
// Записываем каждую переменную в файл, используя print_r для получения строкового представления данных.
// TRUE в функции print_r используется для того, чтобы вывести результат как строку.
fputs($fp, "arg #$name = ".print_r($var, TRUE)."\n");
}
// Записываем разделитель для удобства чтения в логе.
fputs($fp, "----------------\n");
// Закрываем файл после записи.
fclose($fp);
}
Описание:
-
Глобальная переменная: Функция использует глобальную переменную
$cfg, которая хранит конфигурационные данные, в частности путь к лог-файлу отладки ($cfg['debug_logpath']). -
Открытие файла для записи: Внутри функции открывается файл лога для записи с именем, состоящим из префикса
cot_debug_и текущей даты и времени (Ymd_His), чтобы избежать перезаписывания старых данных. Файл открывается в режиме добавления ('a'), что позволяет добавлять новые данные в конец файла. -
Получение стека вызовов:
debug_backtrace()извлекает стек вызовов функций. Это позволяет получить информацию о том, в каком файле и на какой строке был вызван этот код, что полезно для отладки. -
Запись данных в файл: В файл записывается информация о месте вызова функции, а затем для каждого переданного аргумента записывается его строковое представление с помощью
print_r(). Аргументы записываются в файл с нумерацией, чтобы было понятно, какой аргумент был передан в каком порядке. -
Закрытие файла: После того как все данные записаны, файл закрывается с помощью
fclose().
Этот код используется для того, чтобы записывать состояние переменных и места их вызова в лог-файл, что может быть полезно для отладки в процессе работы системы, без остановки выполнения программы.
/**
* Выводит стек вызовов программы.
*
* @param bool $clear_screen Если TRUE, выводит только стек вызовов. В противном случае вывод будет отображен в обычном потоке.
* @see cot_assert(), cot_vardump()
*/
function cot_backtrace($clear_screen = TRUE) // Объявление функции cot_backtrace с параметром $clear_screen, который контролирует вывод.
{
if ($clear_screen) // Проверяем, нужно ли очищать экран перед выводом.
{
ob_end_clean(); // Очищаем буфер вывода, чтобы избежать вывода лишней информации.
cot_sendheaders('text/plain'); // Отправляем заголовок для вывода в формате plain text.
}
debug_print_backtrace(); // Функция, которая выводит стек вызовов программы.
if ($clear_screen) // Если флаг $clear_screen установлен в TRUE, завершаем выполнение программы.
{
die(); // Завершаем выполнение скрипта.
}
}
Комментарии
-
function cot_backtrace($clear_screen = TRUE)- Функция называется
cot_backtraceи принимает один параметр$clear_screen. - Параметр
$clear_screenпо умолчанию установлен вTRUE. Если он равенTRUE, то перед выводом стека вызовов будет очищен экран (выход из всех предыдущих выводов). ЕслиFALSE, стек вызовов будет выведен в обычном потоке.
- Функция называется
-
if ($clear_screen)- Проверяется значение параметра
$clear_screen. Если оно истинно, то будет выполнен следующий блок кода. Это условие позволяет контролировать, нужно ли очищать экран перед выводом.
- Проверяется значение параметра
-
ob_end_clean()- Эта функция завершает работу с буфером вывода и очищает его. Если до вызова этой функции был записан какой-либо вывод в буфер, он будет удален.
- Это нужно для того, чтобы предотвратить вывод лишней информации (например, от предыдущих операций или ошибок) до того, как будет напечатан стек вызовов.
-
cot_sendheaders('text/plain')- Эта функция отправляет заголовки, которые указывают браузеру, что ответ должен быть в текстовом формате (
text/plain). Это важно, чтобы браузер корректно отобразил вывод в виде простого текста.
- Эта функция отправляет заголовки, которые указывают браузеру, что ответ должен быть в текстовом формате (
-
debug_print_backtrace()- Это стандартная функция PHP, которая выводит стек вызовов. Стек вызовов показывает последовательность всех вызовов функций, начиная с текущей и заканчивая самой первой функцией, которая была вызвана. Она полезна для отладки, так как позволяет увидеть, какие функции и в каком порядке были выполнены.
-
if ($clear_screen)- Еще раз проверяется флаг
$clear_screen. Если он равенTRUE, выполнение скрипта завершается.
- Еще раз проверяется флаг
-
die()- Функция
die()завершает выполнение текущего скрипта. В контексте этой функции это нужно, чтобы после вывода стека вызовов выполнение программы было прекращено. Это часто используется в отладке, чтобы увидеть стек вызовов и остановить дальнейшую обработку, избегая лишних действий.
- Функция
Итог
Функция cot_backtrace предоставляет отладочную информацию о стековом следе выполнения программы. Она может либо очистить экран перед выводом этой информации, либо показать её в обычном потоке. При этом выполнение скрипта останавливается после вывода стека вызовов, что полезно для детальной отладки.
/**
* Печатает структуру и содержимое всех глобальных переменных, которые в данный момент назначены.
*
* @param bool $clear_screen Если TRUE, то выводится только var_dump. В противном случае будет выведено в обычном потоке.
* @see COT_VARDUMP_LOCALS, cot_assert(), cot_backtrace()
*/
function cot_vardump($clear_screen = TRUE) // Функция cot_vardump принимает один параметр $clear_screen (по умолчанию TRUE). Этот параметр контролирует, будет ли очищен экран перед выводом.
{
if ($clear_screen) // Проверка, нужно ли очищать экран перед выводом.
{
ob_end_clean(); // Если нужно очищать экран, выполняется очистка буфера вывода с помощью ob_end_clean(). Это удаляет весь вывод, который был произведен до этого момента.
}
foreach ($GLOBALS as $key => $val) // Перебираем все глобальные переменные в массиве $GLOBALS, который содержит все глобальные переменные, доступные в текущем скрипте.
{
if ($key != 'GLOBALS') // Исключаем сам массив $GLOBALS из вывода, так как он уже содержит все глобальные переменные.
{
echo "<br /><em>$key</em><br />"; // Выводим имя текущей глобальной переменной ($key) в виде HTML-тега <em> для выделения текста.
var_dump($val); // Выводим содержимое текущей переменной ($val) с помощью функции var_dump(). Это выведет тип данных и значение переменной.
}
}
if ($clear_screen) // Если флаг $clear_screen равен TRUE, то завершение выполнения скрипта.
{
die(); // Завершаем выполнение скрипта после вывода отладочной информации, чтобы предотвратить дальнейший вывод.
}
}
Разбор:
-
function cot_vardump($clear_screen = TRUE)- Функция называется
cot_vardump, она принимает один параметр$clear_screen, который по умолчанию установлен вTRUE. Этот параметр контролирует, нужно ли очищать экран перед выводом отладочной информации.
- Функция называется
-
if ($clear_screen)- Проверяется, нужно ли очищать экран перед выводом. Если флаг
$clear_screenустановлен вTRUE, то выполняется очистка буфера вывода.
- Проверяется, нужно ли очищать экран перед выводом. Если флаг
-
ob_end_clean()- Функция
ob_end_clean()очищает буфер вывода. Это необходимо для того, чтобы удалить весь предварительный вывод, который был записан в буфер до вызова этой функции. Таким образом, перед выводом отладочной информации на экране не будет мусора.
- Функция
-
foreach ($GLOBALS as $key => $val)- В цикле перебираются все глобальные переменные, которые находятся в массиве
$GLOBALS. Этот массив включает все глобальные переменные, доступные в текущем контексте. Каждая переменная в нем имеет ключ (имя переменной)$keyи значение переменной$val.
- В цикле перебираются все глобальные переменные, которые находятся в массиве
-
if ($key != 'GLOBALS')- Проверяется, чтобы исключить сам массив
$GLOBALSиз вывода. ПеременнаяGLOBALSне имеет смысла для отладки, так как она содержит все глобальные переменные.
- Проверяется, чтобы исключить сам массив
-
echo "<br /><em>$key</em><br />"- Выводим имя текущей переменной в виде HTML-кода, используя теги
<br />для переноса строки и<em>для выделения текста. Это поможет визуально разделить вывод информации о разных переменных.
- Выводим имя текущей переменной в виде HTML-кода, используя теги
-
var_dump($val)- Функция
var_dump()выводит информацию о переменной: ее тип и значение. Это позволяет увидеть полное содержимое переменной, включая все вложенные массивы и объекты, что полезно для отладки.
- Функция
-
if ($clear_screen)- Если флаг
$clear_screenравенTRUE, выполняется завершение работы скрипта.
- Если флаг
-
die()- Функция
die()завершает выполнение скрипта. Это необходимо для того, чтобы после вывода отладочной информации программа не продолжала свою работу и не выводила лишнюю информацию.
- Функция
Заключение:
Функция cot_vardump предназначена для вывода всех глобальных переменных, которые доступны в текущем скрипте, с их содержимым и типами данных. Она может очищать экран перед выводом, чтобы исключить лишний вывод, и завершать выполнение программы после вывода, если параметр $clear_screen установлен в TRUE. Это полезный инструмент для отладки и анализа состояния глобальных переменных в коде.
/**
* Локальная макро-функция vardump. Печатает структуру и содержимое всех переменных в локальной области видимости.
*
* @example eval(COT_VARDUMP_LOCALS);
* @see cot_vardump(), cot_watch()
*/
define('COT_VARDUMP_LOCALS', 'ob_end_clean(); // Очищаем буфер вывода, если он существует, с помощью ob_end_clean().
$debug_vars = get_defined_vars(); // Получаем все определенные переменные в текущей области видимости и сохраняем их в массив $debug_vars.
foreach ($debug_vars as $debug_key => $debug_val) // Перебираем все переменные, определенные в текущем контексте.
{
if ($debug_key != "GLOBALS" && $debug_key != "debug_vars") // Исключаем из вывода переменные GLOBALS и сам массив $debug_vars.
{
echo "<br /><em>$debug_key</em><br />"; // Выводим имя текущей переменной в виде HTML-тега <em> для выделения.
var_dump($debug_val); // Используем var_dump() для вывода информации о значении текущей переменной (тип и значение).
}
}
die(); // Завершаем выполнение скрипта, чтобы избежать дальнейшего вывода после отладки.
');
Разбор:
-
define('COT_VARDUMP_LOCALS', '...')- Здесь создается константа
COT_VARDUMP_LOCALS, которая содержит строку PHP-кода. Этот код будет выполнен при вызовеeval(COT_VARDUMP_LOCALS).
- Здесь создается константа
-
ob_end_clean();- Очищает буфер вывода, если он был начат, тем самым устраняя любой предыдущий вывод перед выполнением отладки.
-
$debug_vars = get_defined_vars();- Функция
get_defined_vars()возвращает массив всех переменных, определенных в текущей области видимости, включая локальные переменные и глобальные переменные, если они были объявлены в этом контексте.
- Функция
-
foreach ($debug_vars as $debug_key => $debug_val)- Перебираются все переменные, определенные в текущей области видимости. Для каждой переменной сохраняется ключ (имя переменной) в
$debug_keyи значение переменной в$debug_val.
- Перебираются все переменные, определенные в текущей области видимости. Для каждой переменной сохраняется ключ (имя переменной) в
-
if ($debug_key != "GLOBALS" && $debug_key != "debug_vars")- Исключаются из вывода переменные
GLOBALS(массив, содержащий все глобальные переменные) и сам массив$debug_vars(который содержит все локальные переменные). Эти переменные не должны быть выведены, так как они являются служебными.
- Исключаются из вывода переменные
-
echo "<br /><em>$debug_key</em><br />";- Имя переменной (
$debug_key) выводится на экран с помощью HTML-тега<em>, который выделяет текст.
- Имя переменной (
-
var_dump($debug_val);- Используется функция
var_dump(), чтобы вывести тип и содержимое переменной. Это позволяет увидеть полное описание значения переменной, включая тип данных и структуру (если переменная — это массив или объект).
- Используется функция
-
die();- Завершается выполнение скрипта с помощью
die(), чтобы предотвратить дальнейший вывод после отладки.
- Завершается выполнение скрипта с помощью
Заключение:
Макрос COT_VARDUMP_LOCALS используется для вывода всех локальных переменных, определенных в области видимости, где он вызван. Он очищает экран перед выводом, исключает служебные переменные из вывода и завершает выполнение скрипта после отладки. Этот макрос полезен для детальной диагностики состояния переменных в текущем контексте выполнения программы.
/**
* Записывает текущее состояние глобальных переменных в файл отладки и продолжает обычное выполнение скрипта.
*
* @global string $cfg['debug_logpath'] Путь к файлу для записи лога отладки.
* @see COT_CHECKPOINT_LOCALS, cot_watch(), cot_vardump()
*/
function cot_checkpoint()
{
global $cfg; // Используем глобальную переменную $cfg, которая содержит конфигурационные параметры.
// Открываем или создаем файл для записи лога отладки. Путь к файлу определяется в $cfg['debug_logpath'].
// Имя файла содержит текущую дату и время (в формате ГГГГММДД_ЧЧММСС), чтобы избежать перезаписи логов.
$fp = fopen($cfg['debug_logpath'] . '/cot_debug_' . date('Ymd_His') . '.log', 'a');
// Получаем стек вызовов (backtrace), который содержит информацию о том, как была вызвана текущая функция.
$btrace = debug_backtrace();
// Записываем в лог файл имя файла и номер строки, где был вызван cot_checkpoint().
fputs($fp, $btrace[1]['file'] . ', ' . $btrace[1]['line'] . ":\n");
// Перебираем все глобальные переменные.
foreach ($GLOBALS as $key => $val)
{
// Исключаем из лога переменную 'GLOBALS', чтобы не записывать сам массив глобальных переменных.
if ($key != 'GLOBALS')
{
// Записываем имя переменной и её значение в лог файл. Для массивов и объектов используется print_r().
fputs($fp, "$key = " . print_r($val, TRUE) . "\n");
}
}
// Разделитель для лучшей читаемости логов.
fputs($fp, "----------------\n");
// Закрываем файл после записи.
fclose($fp);
}
Разбор:
-
global $cfg;- Эта строка делает переменную
$cfgдоступной внутри функции. Переменная$cfgобычно содержит глобальные настройки системы, в том числе путь к файлам и другие конфигурационные данные.
- Эта строка делает переменную
-
$fp = fopen($cfg['debug_logpath'] . '/cot_debug_' . date('Ymd_His') . '.log', 'a');- Открывается файл для записи лога. Путь к файлу определяется значением
$cfg['debug_logpath'](предположительно это путь к папке для логов). Имя файла включает текущую дату и время в форматеГГГГММДД_ЧЧММСС, чтобы создавать уникальные имена для каждого лога. Открытие в режиме 'a' означает добавление в конец файла, если он существует.
- Открывается файл для записи лога. Путь к файлу определяется значением
-
$btrace = debug_backtrace();- Функция
debug_backtrace()возвращает стек вызовов — массив, в котором содержится информация о том, как была вызвана текущая функция. Это может помочь в отладке, например, для определения местоположения вызова.
- Функция
-
fputs($fp, $btrace[1]['file'] . ', ' . $btrace[1]['line'] . ":\n");- Мы записываем в лог файл имя файла и строку, в которой был вызван
cot_checkpoint().$btrace[1]указывает на предыдущий вызов функции, то есть функцию, из которой был вызванcot_checkpoint().
- Мы записываем в лог файл имя файла и строку, в которой был вызван
-
foreach ($GLOBALS as $key => $val)- Перебираем все глобальные переменные, используя массив
$GLOBALS. Это позволит нам вывести все переменные, доступные в глобальной области видимости.
- Перебираем все глобальные переменные, используя массив
-
if ($key != 'GLOBALS')- Мы исключаем переменную
GLOBALS, потому что она сама является массивом всех глобальных переменных, и её вывод не имеет смысла в логе.
- Мы исключаем переменную
-
fputs($fp, "$key = " . print_r($val, TRUE) . "\n");- Для каждой переменной записываем её имя и значение в лог файл. Используется
print_r(), так как эта функция удобно выводит массивы и объекты в читабельном виде. Второй параметрTRUEпозволяет вернуть результат в виде строки, а не вывести его напрямую.
- Для каждой переменной записываем её имя и значение в лог файл. Используется
-
fputs($fp, "----------------\n");- Добавляется разделитель, чтобы отделить записи от разных вызовов в логе, улучшая читаемость.
-
fclose($fp);- Закрываем файл после записи, освобождая ресурсы.
Заключение:
Функция cot_checkpoint() используется для записи текущего состояния глобальных переменных в лог-файл. Она сохраняет информацию о месте вызова функции, а также о всех глобальных переменных, что может быть полезно для отладки. Лог-файл сохраняется с уникальным именем, основанным на текущей дате и времени.
/**
* Записывает переменные в локальной области видимости в файл отладки и продолжает обычное выполнение скрипта.
*
* @global string $cfg['debug_logpath'] Путь к файлу для записи лога отладки.
* @example eval(COT_CHECKPOINT_LOCALS); Пример использования.
* @see cot_checkpoint(), cot_watch(), COT_VARDUMP_LOCALS
*/
define('COT_CHECKPOINT_LOCALS', 'global $cfg; // Используем глобальную переменную $cfg для доступа к конфигурации.
$debug_fp = fopen($cfg[\'debug_logpath\'] . \'/cot_debug_\' . date(\'Ymd_His\') . \'.log\', "a"); // Открываем или создаем файл для записи лога. Путь берется из конфигурации ($cfg['debug_logpath']), имя файла включает текущую дату и время (ГГГГММДД_ЧЧММСС) для уникальности.
$debug_btrace = debug_backtrace(); // Получаем стек вызовов функции для записи информации о том, откуда был вызван этот код.
fputs($debug_fp, $debug_btrace[0]["file"] . ", " . $debug_btrace[1]["line"] . ":\n"); // Записываем в файл имя файла и строку, откуда был вызван код (предположительно, из предыдущей строки стека вызова).
$debug_vars = get_defined_vars(); // Получаем все переменные, определенные в текущей области видимости (локальные переменные).
foreach ($debug_vars as $debug_key => $debug_val) // Перебираем все локальные переменные.
{
if ($debug_key != "GLOBALS" && $debug_key != "debug_vars" && $debug_key != "debug_btrace" && $debug_key != "debug_fp") // Исключаем из лога переменные, которые не интересуют: 'GLOBALS' (массив всех глобальных переменных), 'debug_vars', 'debug_btrace' и 'debug_fp' (вспомогательные переменные).
{
fputs($debug_fp, "$debug_key = " . print_r($debug_val, TRUE) . "\n"); // Записываем в лог имя переменной и её значение. Для массивов и объектов используется print_r().
}
}
fputs($debug_fp, "----------------\n"); // Добавляем разделитель для улучшения читаемости лога.
fclose($debug_fp); // Закрываем файл после записи.
');
Разбор:
-
global $cfg;- Эта строка позволяет использовать глобальную переменную
$cfg, которая обычно содержит конфигурационные данные, например, путь для записи логов.
- Эта строка позволяет использовать глобальную переменную
-
$debug_fp = fopen($cfg['debug_logpath'] . '/cot_debug_' . date('Ymd_His') . '.log', "a");- Открытие файла для записи лога. Путь берется из
$cfg['debug_logpath']. Имя файла включает текущую дату и время (форматГГГГММДД_ЧЧММСС), чтобы создать уникальное имя для каждого файла лога. Режим 'a' означает добавление данных в конец файла.
- Открытие файла для записи лога. Путь берется из
-
$debug_btrace = debug_backtrace();- Получаем стек вызовов (backtrace). Это позволяет получить информацию о файле и строке, где был вызван код, что полезно для отладки.
-
fputs($debug_fp, $debug_btrace[0]["file"] . ", " . $debug_btrace[1]["line"] . ":\n");- Записываем в лог имя файла и строку, откуда был вызван этот код.
$debug_btrace[0]и$debug_btrace[1]содержат информацию о вызовах из стека.
- Записываем в лог имя файла и строку, откуда был вызван этот код.
-
$debug_vars = get_defined_vars();- Получаем все переменные, которые определены в текущей области видимости (локальные переменные).
-
foreach ($debug_vars as $debug_key => $debug_val)- Перебираем все локальные переменные.
-
if ($debug_key != "GLOBALS" && $debug_key != "debug_vars" && $debug_key != "debug_btrace" && $debug_key != "debug_fp")- Исключаем переменные, которые не интересуют нас в логе:
GLOBALS(массив всех глобальных переменных), а также вспомогательные переменные (debug_vars,debug_btrace,debug_fp), которые используются в процессе записи лога.
- Исключаем переменные, которые не интересуют нас в логе:
-
fputs($debug_fp, "$debug_key = " . print_r($debug_val, TRUE) . "\n");- Записываем имя переменной и её значение в лог. Для массивов или объектов используется
print_r(), который выводит данные в удобочитаемом виде.
- Записываем имя переменной и её значение в лог. Для массивов или объектов используется
-
fputs($debug_fp, "----------------\n");- Добавляем разделитель в лог для отделения разных записей, улучшая читаемость.
-
fclose($debug_fp);- Закрываем файл лога, чтобы сохранить все данные и освободить ресурсы.
Заключение:
Этот фрагмент кода позволяет записывать в лог файл все локальные переменные, которые определены в момент вызова кода. Лог-файл получает уникальное имя, которое включает дату и время. Функция полезна для отладки, так как позволяет отслеживать текущее состояние всех локальных переменных и анализировать их в любой момент времени.
Комментарии (0)
Автор контента
Оффлайн
Administrator
Последняя авторизация: 05.07.2026 18:32
- Страница размещена: 26.01.2025 13:21
- Последнее обновление: 26.01.2025 13:26