summaryrefslogtreecommitdiff
path: root/it_debug.class
diff options
context:
space:
mode:
authorChristian Schneider2007-10-11 00:39:30 +0000
committerChristian Schneider2007-10-11 00:39:30 +0000
commit35fe33f7364329dacf415c950bff01b6de9ef88e (patch)
treeb0e6b018b50038ca20266723c53750268f508df5 /it_debug.class
parent1f95711ff3e9697cd85a54545ab42e5fd3611317 (diff)
downloaditools-35fe33f7364329dacf415c950bff01b6de9ef88e.tar.gz
itools-35fe33f7364329dacf415c950bff01b6de9ef88e.tar.bz2
itools-35fe33f7364329dacf415c950bff01b6de9ef88e.zip
Populated release branch
Diffstat (limited to 'it_debug.class')
-rw-r--r--it_debug.class151
1 files changed, 151 insertions, 0 deletions
diff --git a/it_debug.class b/it_debug.class
new file mode 100644
index 0000000..79433db
--- /dev/null
+++ b/it_debug.class
@@ -0,0 +1,151 @@
+<?php
+/*
+** $Id$
+**
+** debug.class - Debug Functionality for ITools
+**
+** ITools - the Internet Tools Library
+**
+** Copyright (C) 1995-2003 by the ITools Authors.
+** This program is free software; you can redistribute it and/or
+** modify it under the terms of either the GNU General Public License
+** or the GNU Lesser General Public License, as published by the Free
+** Software Foundation. See http://www.gnu.org/licenses/ for details.
+*/
+
+/**
+ * Debug functions
+ */
+class it_debug
+{
+ var $level;
+
+/**
+ * Constructor
+ * @param $level Debug level. All debug() calls with a level <= $level are shown.
+ */
+function it_debug($level=0)
+{
+ $this->level = isset($GLOBALS['debug_level']) ? $GLOBALS['debug_level'] : $level;
+}
+
+
+/**
+ * Output a message if the global debug level is higher or the same as $level
+ * @param $text Message to display
+ * @param $level Debug level
+ */
+function debug($text, $level = 0)
+{
+ if ($this->level >= $level)
+ {
+ echo (isset($_SERVER['REMOTE_ADDR']) ? nl2br("$level $text\n") : "$level $text")."\n";
+ flush();
+ }
+}
+
+
+/**
+ * Backend for functions D(), ED() and EDX() in functions.php
+ * @param Origargs Array containing original arguments do ED() etc
+ * @return String representation of dump
+ */
+function dump($args)
+{
+ $stack = debug_backtrace();
+ $line = $stack[1]['line'];
+ $file = $stack[1]['file'];
+
+ if (!$_SERVER['REMOTE_ADDR'] && (substr(file_get_contents($file), 0, 2) == "#!"))
+ $line++;
+
+ if (ereg('(csv|txt|gif|jpg)', $_SERVER['PHP_SELF']) || !ereg('Mozilla', $_SERVER['HTTP_USER_AGENT']))
+ $plain = 1;
+ else if ($_SERVER['REMOTE_ADDR'])
+ {
+ $blue = "<span style='color:#00c'>";
+ $noblue = "</span>";
+ }
+ else if (getenv('USER') != 'cschneid') # ;)
+ {
+ $blue = "\033[34m";
+ $noblue = "\033[m";
+ $red = "\033[31m";
+ $nored = "\033[m";
+ }
+
+ if (!isset($GLOBALS['it_debug::dump source'][$file]))
+ $GLOBALS['it_debug::dump source'][$file] = file($file);
+
+ $src = $GLOBALS['it_debug::dump source'][$file][$line-1];
+
+ $paramlist = preg_match('/(D|ED|EDC|EDX)\s*\(\s*([^)]+)/i', $src, $parts) ? $parts[2] : "";
+ $argnames = preg_split('/\s*,\s*/', $paramlist);
+
+ if ($parts[1] == "EDC") # First argument was stripped by EDC
+ array_shift($argnames);
+
+ foreach ($args as $arg)
+ {
+ $var = array_shift($argnames);
+ $item = gettype($arg) == 'resource' ? trim(print_r($arg, true)) : trim(var_export($arg, true));
+
+ # Replace PHP 5 var_export object representation by old style
+ while (preg_match("#(.*\b)(\w+)::__set_state\(array\(([^()]+)\)\)(.*)#s", $item, $regs))
+ {
+ list (, $head, $classname, $values, $tail) = $regs;
+ $classname = strtolower($classname);
+ $values = preg_replace("#'(\w+)' =>([^\n]+),#", 'var \$$1 = $2;', $values);
+ $item = $head . "class $classname { $values }$tail";
+ }
+
+ $item = preg_replace("#(=>?)\s*\n\s*(array|class)#", '$1 $2', $item); # array( and class on same line as key
+ $item = preg_replace('#array \(\s+([^({,;]+),\s+\)#', 'array( $1 )', $item); # 1-element arrays on 1 line
+ $item = preg_replace('#class (\S+) \{\s+([^({,;]+;)?\s+\}#', 'class $1 { $2 }', $item); # 1-element objects on 1 line
+ #$item = preg_replace('#\{\s*var \$attr#', '{ var $attr', $item); # move $attr on same line
+ $item = preg_replace("#\\(\s*\n\s*\\)#", "()", $item); # empty arrays on 1 line
+ #$item = preg_replace('#\s+var \$_(.|\n)*?;\s*\n#', "", $item);
+ $item = "$red$item$nored";
+
+ if (isset($_SERVER['REMOTE_ADDR']) && !$plain)
+ $item = htmlspecialchars($item);
+
+ if (ereg('^[\'"]', $var))
+ $r .= "$item ";
+ else {
+ $var = "$blue$var=$noblue";
+ $r .= preg_match("/\n/", $item) ? "\n$var$item\n" : "$var$item ";
+ }
+ }
+
+ if ($GLOBALS['debug_indent'])
+ $r = str_repeat(" ", count(debug_backtrace())-3) . $r;
+
+ if (isset($_SERVER['REMOTE_ADDR']) && !$plain)
+ return "<pre style='color:#c00; text-align:left; background-color:white; margin:0'>$r</pre>\n";
+ else
+ return "$r\n";
+}
+
+/**
+ * Print short stackdump
+ * @param $skip number of stack levels to omip
+ */
+function backtrace($skip = 0)
+{
+ $result = array();
+
+ if (!function_exists('memory_get_usage') || (memory_get_usage() < 50000000))
+ {
+ foreach (array_slice(debug_backtrace(), $skip + 1) as $call)
+ {
+ if ($call['file'])
+ $result[] = basename($call['file']) . ":" . $call['line'];
+ }
+ }
+
+ return join(" ", $result);
+}
+
+}
+?>