Esempio n. 1
0
 /**
  * Get trace summary HTML string
  *
  * <code>
  * echo getTraceSummary(debug_backtrace()); //output trace summary
  * </code>
  *
  * @param array $debuBackTrace trace data
  *
  * @return void
  */
 public static function getTraceSummary($debuBackTrace = null)
 {
     $debuBackTrace = is_null($debuBackTrace) ? debug_backtrace() : $debuBackTrace;
     $traceLevels = array_keys($debuBackTrace);
     $i = 0;
     $traceSummary = '';
     foreach ($traceLevels as $level) {
         $trace = $debuBackTrace[$level];
         if (isset($trace['file'])) {
             $file = $trace['file'];
             $line = $trace['line'];
             $fileArray = file($file);
             $hitLine = $fileArray[$line - 1];
         } elseif (isset($trace['class']) && isset($trace['function'])) {
             $ref = new ReflectionMethod($trace['class'], $trace['function']);
             $file = $ref->getFileName();
             $line = $ref->getStartLine();
             $fileArray = file($file);
             $hitLine = $fileArray[$line - 1];
         } elseif (isset($trace['function'])) {
             $ref = new ReflectionFunction($trace['function']);
             $file = $ref->getFileName();
             $line = $ref->getStartLine();
             $fileArray = $file ? file($file) : array();
             $hitLine = $file ? $fileArray[$line - 1] : '';
         } else {
             $file = false;
             $hitLine = 'n/a';
         }
         $hitLine = trim($hitLine);
         $args = array();
         if (isset($trace['args'])) {
             foreach ($trace['args'] as $arg) {
                 if (is_array($arg)) {
                     $args[] = 'Array';
                 } elseif (is_string($arg)) {
                     $args[] = "'{$arg}'";
                 } elseif (is_scalar($arg)) {
                     $args[] = $arg;
                 } else {
                     $args[] = 'Object';
                 }
             }
         }
         if (isset($trace['class'])) {
             $hitInfo = "{$trace['class']}{$trace['type']}{$trace['function']}({$args}) ";
         } elseif (isset($trace['function'])) {
             $hitInfo = "{$trace['function']}({$args}) ";
         } else {
             $hitInfo = '';
         }
         $args = implode(',', $args);
         $traceSummary .= '<li><span class="timeline-num">' . $i . '</span>';
         $traceSummary .= '<span class="timeline-body">' . $hitLine . '</span>';
         $traceSummary .= '<span class="timeline-info">' . $hitInfo . '<br />';
         $traceSummary .= $file ? Panda::getEditorLink($file, $line) : '';
         $traceSummary .= '</span></li>';
         $i++;
     }
     $traceSummary = '<ol id="trace-summary" class="timeline">' . $traceSummary . '</ol>';
     return $traceSummary;
 }