Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function dump($var, $return = FALSE)
- {
- $output = "<pre class=\"dump\">" . _dump($var, 0) . "</pre>\n";
- if (!$return)
- {
- $trace = debug_backtrace();
- $i = isset($trace[1]['class']) && $trace[1]['class'] === __CLASS__ ? 1 : 0;
- if (isset($trace[$i]['file'], $trace[$i]['line']))
- {
- $output = substr_replace($output, ' <small>' . htmlspecialchars("in file {$trace[$i]['file']} on line {$trace[$i]['line']}", ENT_NOQUOTES) . '</small>', -8, 0);
- }
- }
- if ($return)
- {
- return $output;
- }
- else
- {
- echo $output;
- return $var;
- }
- }
- function _dump(&$var, $level)
- {
- $maxDepth = 4;
- $maxLen = 250;
- $tableUtf = $tableBin = array();
- $reBinary = '#[^\x09\x0A\x0D\x20-\x7E\xA0-\x{10FFFF}]#u';
- if ($tableUtf === NULL)
- {
- foreach (range("\x00", "\xFF") as $ch)
- {
- if (ord($ch) < 32 && strpos("\r\n\t", $ch) === FALSE)
- $tableUtf[$ch] = $tableBin[$ch] = '\\x' . str_pad(dechex(ord($ch)), 2, '0', STR_PAD_LEFT);
- elseif (ord($ch) < 127)
- $tableUtf[$ch] = $tableBin[$ch] = $ch;
- else
- {
- $tableUtf[$ch] = $ch;
- $tableBin[$ch] = '\\x' . dechex(ord($ch));
- }
- }
- $tableBin["\\"] = '\\\\';
- $tableBin["\r"] = '\\r';
- $tableBin["\n"] = '\\n';
- $tableBin["\t"] = '\\t';
- $tableUtf['\\x'] = $tableBin['\\x'] = '\\\\x';
- }
- if (is_bool($var))
- {
- return ($var ? 'TRUE' : 'FALSE') . "\n";
- }
- elseif ($var === NULL)
- {
- return "NULL\n";
- }
- elseif (is_int($var))
- {
- return "$var\n";
- }
- elseif (is_float($var))
- {
- $var = (string) $var;
- if (strpos($var, '.') === FALSE)
- $var .= '.0';
- return "$var\n";
- } elseif (is_string($var))
- {
- if ($maxLen && strlen($var) > $maxLen)
- {
- $s = htmlSpecialChars(substr($var, 0, $maxLen), ENT_NOQUOTES) . ' ... ';
- }
- else
- {
- $s = htmlSpecialChars($var, ENT_NOQUOTES);
- }
- $s = strtr($s, preg_match($reBinary, $s) || preg_last_error() ? $tableBin : $tableUtf);
- $len = strlen($var);
- return "\"$s\"" . ($len > 1 ? " ($len)" : "") . "\n";
- }
- elseif (is_array($var))
- {
- $s = "<span>array</span>(" . count($var) . ") ";
- $space = str_repeat($space1 = ' ', $level);
- $brackets = range(0, count($var) - 1) === array_keys($var) ? "[]" : "{}";
- static $marker;
- if ($marker === NULL)
- $marker = uniqid("\x00", TRUE);
- if (empty($var))
- {
- }
- elseif (isset($var[$marker]))
- {
- $brackets = $var[$marker];
- $s .= "$brackets[0] *RECURSION* $brackets[1]";
- }
- elseif ($level < $maxDepth || !$maxDepth)
- {
- $s .= "<code>$brackets[0]\n";
- $var[$marker] = $brackets;
- foreach ($var as $k => &$v)
- {
- if ($k === $marker)
- continue;
- $k = is_int($k) ? $k : '"' . strtr($k, preg_match($reBinary, $k) || preg_last_error() ? $tableBin : $tableUtf) . '"';
- $s .= "$space$space1$k => " . _dump($v, $level + 1);
- }
- unset($var[$marker]);
- $s .= "$space$brackets[1]</code>";
- } else
- {
- $s .= "$brackets[0] ... $brackets[1]";
- }
- return $s . "\n";
- }
- elseif (is_object($var))
- {
- $arr = (array) $var;
- $s = "<span>" . get_class($var) . "</span>(" . count($arr) . ") ";
- $space = str_repeat($space1 = ' ', $level);
- static $list = array();
- if (empty($arr))
- {
- }
- elseif (in_array($var, $list, TRUE))
- {
- $s .= "{ *RECURSION* }";
- }
- elseif ($level < $maxDepth || !$maxDepth)
- {
- $s .= "<code>{\n";
- $list[] = $var;
- foreach ($arr as $k => &$v)
- {
- $m = '';
- if ($k[0] === "\x00")
- {
- $m = $k[1] === '*' ? ' <span>protected</span>' : ' <span>private</span>';
- $k = substr($k, strrpos($k, "\x00") + 1);
- }
- $k = strtr($k, preg_match($reBinary, $k) || preg_last_error() ? $tableBin : $tableUtf);
- $s .= "$space$space1\"$k\"$m => " . _dump($v, $level + 1);
- }
- array_pop($list);
- $s .= "$space}</code>";
- }
- else
- {
- $s .= "{ ... }";
- }
- return $s . "\n";
- }
- elseif (is_resource($var))
- {
- return "<span>" . get_resource_type($var) . " resource</span>\n";
- }
- else
- {
- return "<span>unknown type</span>\n";
- }
- }
Add Comment
Please, Sign In to add comment