2
0

debug.class.php 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. <?php
  2. class debug
  3. {
  4. private static $logs = [];
  5. private static $startTime;
  6. private static $closeTime;
  7. public static function includeDebug()
  8. {
  9. if (core::isDebug()) {
  10. echo '<link rel="stylesheet" href="css/debug.css">';
  11. }
  12. }
  13. public static function dump($var, $label = 'Dump', $echo = true)
  14. {
  15. // Start output buffering
  16. ob_start();
  17. echo "<pre class='debug-dump'>";
  18. echo "<strong>$label:</strong> ";
  19. // Convert array or object to string
  20. if (is_array($var)) {
  21. print_r($var);
  22. } elseif (is_object($var)) {
  23. echo self::objectToString($var);
  24. } else {
  25. var_dump($var);
  26. }
  27. echo "</pre>";
  28. // Get the contents of the buffer
  29. $output = ob_get_clean();
  30. // If echo is true, print the output
  31. if ($echo) {
  32. echo $output;
  33. } else {
  34. return $output;
  35. }
  36. }
  37. public static function objectToString($object, $_tab = NULL) {
  38. ob_start();
  39. $tab = "&nbsp;&nbsp;&nbsp;&nbsp;" . $_tab;
  40. echo "<span class='debug-console-capsule'>Object (" . get_class($object) . ")\n</span>";
  41. echo $_tab . "<span class='debug-console-capsule'>{\n</span>";
  42. foreach (get_object_vars($object) as $property => $value) {
  43. echo $tab . "<span class='debug-console-capsule'>[<span class='debug-console-key'>$property</span>] => </span>";
  44. if (is_array($value)) {
  45. echo self::arrayToString($value, $tab);
  46. } elseif (is_object($value)) {
  47. echo self::objectToString($value, $tab);
  48. } else {
  49. echo "<span class='debug-console-value'>" . var_export($value, true) . "</span>\n";
  50. }
  51. }
  52. echo $_tab . "<span class='debug-console-capsule'>}\n</span>";
  53. return ob_get_clean();
  54. }
  55. public static function arrayToString($array, $_tab = NULL)
  56. {
  57. ob_start();
  58. $tab = "&nbsp;&nbsp;&nbsp;&nbsp;".$_tab;
  59. echo "<span class='debug-console-capsule'>Array\n</span>";
  60. echo $_tab . "<span class='debug-console-capsule'>(\n</span>";
  61. foreach ($array as $key => $value) {
  62. echo $tab . "<span class='debug-console-capsule'>[<span class='debug-console-key'>$key</span>] => </span>";
  63. if (is_array($value)) {
  64. echo self::arrayToString($value, $tab);
  65. } elseif (is_object($value)) {
  66. echo self::objectToString($value, $tab);
  67. } else {
  68. echo "<span class='debug-console-value'>" . var_export($value, true) . "</span>\n";
  69. }
  70. }
  71. echo $_tab . "<span class='debug-console-capsule'>)\n</span>";
  72. return ob_get_clean();
  73. }
  74. private static function variableToString($var, $label)
  75. {
  76. ob_start();
  77. echo "$label: ";
  78. if (is_array($var) || is_object($var)) {
  79. print_r($var);
  80. } else {
  81. var_dump($var);
  82. }
  83. return ob_get_clean();
  84. }
  85. public static function getTraces(){
  86. $return = "Trace : ";
  87. // Obtenir la trace d'exécution
  88. $backtrace = debug_backtrace();
  89. $nb = count($backtrace)-1;
  90. for ($i=$nb; $i > 0; $i--) {
  91. $return .= ($i != 0) ? "[".$backtrace[$i]["function"]."] " : NULL;
  92. $return .= str_replace(DOCUMENT_ROOT, '', $backtrace[$i]["file"]).":".$backtrace[$i]["line"];
  93. $return .= ($i != 1) ? " >> " : NULL;
  94. }
  95. return $return;
  96. }
  97. public static function log($_message, $_mark = NULL)
  98. {
  99. $mark = "<div class='debug-head-console'>";
  100. $mark .= ($_mark != NULL) ? "<div style='font-weight: bold;'>". $_mark . "</div>" : NULL;
  101. $mark .= self::getTraces();
  102. $mark .= "</div>";
  103. if($_message != NULL) {
  104. if(is_array($_message)){
  105. self::$logs[] = $mark ."<div class='debug-console'>" . self::arrayToString($_message) . "</div>";
  106. } elseif(is_object($_message)){
  107. self::$logs[] = $mark ."<div class='debug-console'>" . self::objectToString($_message) . "</div>";
  108. } elseif($mark != NULL){
  109. self::$logs[] = $mark ."<div class='debug-console' style='color:blue;'>" . $_message . "</div>";
  110. } else {
  111. self::$logs[] = $_message;
  112. }
  113. }
  114. }
  115. public static function renderLogs()
  116. {
  117. //if (!empty(self::$logs)) {
  118. echo "<div id='debugger-logs'>";
  119. echo "<div class='debug-renderLogs-header'>";
  120. echo "PHP ". phpversion() . " | " . number_format(self::$closeTime, 4) . " secondes";
  121. echo "</div>";
  122. foreach (self::$logs as $log) {
  123. echo ($log != NULL) ? "<div class='debug-renderLogs-print'>".nl2br($log)."</div>" : NULL;
  124. }
  125. echo "</div>";
  126. echo "
  127. <script>
  128. $(document).ready(function() {
  129. $('#toggle-logs').click(function() {
  130. $('#debugger-logs').slideToggle();
  131. });
  132. // Apply syntax highlighting to log entries
  133. $('.log-entry').each(function() {
  134. var html = $(this).html();
  135. html = html.replace(/(\\$\\w+)/g, '<span class=\"variable\">$1</span>');
  136. html = html.replace(/(\\bfunction\\b)/g, '<span class=\"function\">$1</span>');
  137. $(this).html(html);
  138. });
  139. });
  140. </script>
  141. ";
  142. //}
  143. }
  144. public static function init()
  145. {
  146. // Register shutdown function to render logs at the end of the script execution
  147. register_shutdown_function(function () {
  148. self::renderLogs();
  149. });
  150. }
  151. public static function startTimer()
  152. {
  153. self::$startTime = microtime(true);
  154. }
  155. public static function endTimer()
  156. {
  157. self::$closeTime = microtime(true) - self::$startTime;
  158. }
  159. public static function getBadge(string $_link,string $_label){
  160. return '<a href="'. $_link .'" target="_blank" class="badge debug-badge">'. $_label .'</a>';
  161. }
  162. }