/
dwenge
/
bitrix_gists
Обзор
Документация
Войти
/
dwenge
/
bitrix_gists
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
styled_var_dump.php
102 строки
3 KB
dwenge
Update: styled_var_dump.php
07 авг 2026, 13:17
Верифицирован
07 авг 2026, 13:17
db2c05c
Код
Авторство
О чём код?
<?php function get_settings_d(): array { $settings = is_array($GLOBALS['__d']) ? $GLOBALS['__d'] : []; $settings['xdebug_session_name'] ??= 'use_d'; $enable = 0; $enable |= $settings['admin'] === true && \Bitrix\Main\Engine\CurrentUser::get()->isAdmin(); $enable |= $settings['xdebug_session_name'] === $_COOKIE['XDEBUG_SESSION']; $settings['enable'] = (bool)$enable; $settings['options'] ??= 0; $settings['limit'] ??= 1; $settings['cut_root'] ??= true; return $settings; } function den(): bool { return get_settings_d()['enable'] === true; } /** * Стилизованный var_dump * * Работает с расширением <a href="https://chromewebstore.google.com/detail/cgiklehnkmjlgfipkapgeieiidcgddab?utm_source=item-share-cb">"Xdebug helper"</a> * * Перед использованием можно изменить следующие значения * <ul> * <li>$GLOBALS['__d']['xdebug_session_name'] = Название xdebug сессии (настраивается в расширении)</li> * <li>$GLOBALS['__d']['options'] = DEBUG_BACKTRACE_*</li> * <li>$GLOBALS['__d']['limit'] = глубина вызова (0 = полный стек вызова)</li> * <li>$GLOBALS['__d']['cut_root'] = убрать DOCUMENT_ROOT из путей файла (по умолчанию = true)</li> * <li>$GLOBALS['__d']['admin'] = включить для админа (по умолчанию = false)</li> * </ul> * * @see debug_print_backtrace * @see var_dump */ function d(...$vars): void { $settings = get_settings_d(); if ($settings['enable']) { $re = '/^#(?P<num>\d+)\s(?P<file>.*)\((?P<line>\d+)\):\s(?P<func>.*)$/m'; @ob_start(); debug_print_backtrace((int)$settings['options'], $settings['limit']); $traceHtml = @ob_get_contents(); @ob_end_clean(); $lines = []; if (preg_match_all($re, $traceHtml, $matches, PREG_SET_ORDER)) { foreach ($matches as $m) { if ($settings['cut_root'] === true) { $m['file'] = preg_replace('#^' . $_SERVER['DOCUMENT_ROOT'] . '#', '', $m['file']); } $lines[] = "{$m['num']} <i>{$m['file']}:{$m['line']}</i> <b>{$m['func']}</b>"; } } $traceHtml = join("<br>\n", $lines); @ob_start(); var_dump(...$vars); $dump = @ob_get_contents(); @ob_end_clean(); ?> <div id="<?= uniqid('debug-info-') ?>" style="font-size:1rem;font-weight:normal"> <div onclick="this.nextElementSibling.style.display=this.nextElementSibling.style.display === 'none' ? '' : 'none'" style="padding:10px;background:#f5f5f5;border:1px solid #ccc;cursor:pointer;display:flex;gap:10px" > <span><?= (new \Bitrix\Main\Type\DateTime())->format('c') ?></span> | <span style="flex-grow:1"><?= $traceHtml ?></span> </div> <div style="padding:10px;border:1px solid #ccc;border-top:0"> <pre><code><?= htmlspecialcharsbx($dump) ?></code></pre> </div> </div> <? } } /** * Только очистка буфера var_dump и DIE * @see d */ function dd(...$vars): void { $settings = get_settings_d(); if ($settings['enable']) { global $APPLICATION; $APPLICATION->RestartBuffer(); $GLOBALS['__d']['limit'] ??= 2; d(...$vars); die(); } }