PHP Classes

File: resources/Views/system_errors/tracer.php

Recommend this page to a friend!
  Classes of Ujah Chigozie peter   Luminova REST API Example   resources/Views/system_errors/tracer.php   Download  
File: resources/Views/system_errors/tracer.php
Role: Example script
Content type: text/plain
Description: Example script
Class: Luminova REST API Example
Implements an example of a REST API
Author: By
Last change:
Date: 18 days ago
Size: 11,115 bytes
 

Contents

Class file image Download
<?php use \Luminova\Functions\Maths; use \Luminova\Debugger\Performance; use \Luminova\Http\Request; include_once __DIR__ . '/tracing.php'; function onErrorShowDebugTracer(array $trace, ?array $timelines = null): void{ ?> <div class="tracer-container container main-container"> <div class="tab-content"> <div class="trace-tab-buttons"> <ul> <li class="trace-trigger active" data-target="#backtrace"> <span>BACKTRACE</span> </li> <?php if($timelines): ?> <li class="trace-trigger" data-target="#timeline"> <span>TIMELINE</span> </li> <?php endif;?> <li class="trace-trigger" data-target="#server"> <span>SERVER</span> </li> <li class="trace-trigger" data-target="#request"> <span>REQUEST</span> </li> <li class="trace-trigger" data-target="#files"> <span>FILES</span> </li> <li class="trace-trigger" data-target="#memory"> <span>memory</span> </li> </ul> </div> <div class="trace-tab-contents"> <div class="content active" id="backtrace"> <?= getDebugTracing($trace); ?> </div> <div class="content" id="timeline"> <?php foreach($timelines as $tl): ?> <?php if(str_ends_with($tl, 'thrown')){continue;}?> <p class="entry text-timeline"><?= htmlspecialchars($tl, ENT_QUOTES); ?></p> <?php endforeach; ?> </div> <div class="content" id="server"> <h3>SERVER</h3> <?php foreach(['_SERVER', '_SESSION'] as $var): ?> <?php if(empty($GLOBALS[$var]) || !is_array($GLOBALS[$var])) {continue;} ?> <h3>$<?= htmlspecialchars($var ?? 'NULL', ENT_QUOTES) ?></h3> <table> <thead> <tr> <th>Key</th> <th>Value</th> </tr> </thead> <tbody> <?php foreach($GLOBALS[$var] as $key => $value): ?> <tr> <td><?= htmlspecialchars($key ?? 'NULL', ENT_QUOTES) ?></td> <td> <?php if(is_string($value)): ?> <?= htmlspecialchars($value, ENT_QUOTES) ?> <?php else: ?> <pre><?= print_r($value, true) ?></pre> <?php endif; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php endforeach ?> <?php if(($constants = get_defined_constants(true)) !== []): ?> <h3>CONSTANTS</h3> <table> <thead> <tr> <th>Key</th> <th>Value</th> </tr> </thead> <tbody> <?php foreach($constants['user'] as $key => $value): ?> <tr> <td><?= htmlspecialchars((string) $key, ENT_QUOTES) ?></td> <td> <?php if(is_string($value)): ?> <?= htmlspecialchars($value, ENT_QUOTES) ?> <?php elseif(is_bool($value)): ?> <?= $value ? 'true' : 'false';?> <?php elseif(is_int($value)): ?> <?= $value;?> <?php else: ?> <pre><?= print_r($value, true) ?></pre> <?php endif; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php endif; ?> </div> <div class="content" id="request"> <h3>REQUEST</h3> <?php $request = new Request(); ?> <table> <tbody> <tr> <td style="width: 10em">URI</td> <td><?= htmlspecialchars($request->getUri(), ENT_QUOTES) ?></td> </tr> <tr> <td>HTTP Method</td> <td><?= htmlspecialchars($request->getMethod(), ENT_QUOTES) ?></td> </tr> <tr> <td>IP Address</td> <td><?= htmlspecialchars(ip_address(), ENT_QUOTES) ?></td> </tr> <tr> <td style="width: 10em">Is AJAX Request?</td> <td><?= $request->isAJAX() ? 'yes' : 'no' ?></td> </tr> <tr> <td>Is CLI Command?</td> <td><?= is_command() ? 'yes' : 'no' ?></td> </tr> <tr> <td>Is Secure Request?</td> <td><?= $request->isSecure() ? 'yes' : 'no' ?></td> </tr> <tr> <td>User Agent</td> <td><?= htmlspecialchars($request->getUserAgent()->toString(), ENT_QUOTES) ?></td> </tr> </tbody> </table> <?php $empty = true; ?> <?php foreach(['_GET', '_POST', '_COOKIE'] as $var):?> <?php if(empty($GLOBALS[$var]) || !is_array($GLOBALS[$var])) { continue;} ?> <?php $empty = false; ?> <h3>$<?= htmlspecialchars($var ?? 'NULL', ENT_QUOTES) ?></h3> <table style="width: 100%"> <thead> <tr> <th width="25%">Key</th> <th>Value</th> </tr> </thead> <tbody> <?php foreach($GLOBALS[$var] as $key => $value) : ?> <tr> <td><?= htmlspecialchars($key ?? 'NULL', ENT_QUOTES) ?></td> <td> <?php if(is_string($value)) : ?> <?= htmlspecialchars($value, ENT_QUOTES) ?> <?php else: ?> <pre><?= print_r($value, true) ?></pre> <?php endif; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php endforeach ?> <?php if($empty): ?> <div class="alert"> No $_GET, $_POST, or $_COOKIE Information to show. </div> <?php endif; ?> <?php if(($headers = $request->getHeaders()) !== []): ?> <h3>Headers</h3> <table> <thead> <tr> <th width="25%">Header</th> <th>Value</th> </tr> </thead> <tbody> <?php foreach($headers as $name => $value): ?> <tr> <td><?= htmlspecialchars($name ?? 'NULL', ENT_QUOTES) ?></td> <td><?= htmlspecialchars($value ?? 'NULL', ENT_QUOTES) ?></td> </tr> <?php endforeach; ?> </tbody> </table> <?php endif; ?> </div> <div class="content" id="files"> <h3>FILES</h3> <ul style="list-style-type: none; padding: 0; margin: 0;"> <?= Performance::fileInfo()[1];?> </ul> </div> <div class="content" id="memory"> <h3>MEMORY</h3> <table> <tbody> <tr> <td>Memory Usage</td> <td><?= htmlspecialchars(Maths::toUnit(memory_get_usage(true), true), ENT_QUOTES) ?></td> </tr> <tr> <td style="width: 12em">Peak Memory Usage:</td> <td><?= htmlspecialchars(Maths::toUnit(memory_get_peak_usage(true), true), ENT_QUOTES) ?></td> </tr> <tr> <td>Memory Limit:</td> <td><?= htmlspecialchars((string) ini_get('memory_limit'), ENT_QUOTES) ?></td> </tr> <?php if(defined('IS_UP') && ($dbTime = shared('__DB_QUERY_EXECUTION_TIME__', null, 0)) > 0): ?> <tr> <td>Last Database Executions:</td> <td><?= htmlspecialchars(($dbTime < 1) ? sprintf('%.2f ms', $dbTime * 1000) : sprintf('%.4f s', $dbTime), ENT_QUOTES) ?></td> </tr> <?php endif;?> </tbody> </table> </div> </div> </div> </div> <script> document.querySelectorAll('.trace-trigger').forEach(function(trigger) { trigger.addEventListener('click', function() { document.querySelectorAll('.trace-trigger').forEach(function(t) { t.classList.remove('active'); }); document.querySelectorAll('.trace-tab-contents .content').forEach(function(content) { content.classList.remove('active'); }); this.classList.add('active'); const target = document.querySelector(this.getAttribute('data-target')); if (target) { target.classList.add('active'); } }); }); </script> <?php }