public function txtBacktrace($sh = null, $backtrace = null)
{
if (!isset($backtrace)) {
$backtrace = debug_backtrace();
}
$output = '';
$n = 0;
foreach ($backtrace as $bt) {
++$n;
$args = '';
if (!isset($bt['args'])) {
$bt['args'] = array();
}
foreach ($bt['args'] as $a) {
if (!empty($args)) {
$args .= ', ';
}
switch (gettype($a)) {
case 'integer':
case 'double':
$args .= $a;
break;
case 'string':
$a = substr($a, 0, 128) . (strlen($a) > 128 ? '...' : '');
$args .= "\"{$a}\"";
break;
case 'array':
$args .= 'Array(' . count($a) . ')';
break;
case 'object':
$args .= 'Object(' . get_class($a) . ')';
break;
case 'resource':
$args .= 'Resource(' . strstr($a, '#') . ')';
break;
case 'boolean':
$args .= $a ? 'True' : 'False';
break;
case 'NULL':
$args .= 'Null';
break;
default:
$args .= 'Unknown';
}
}
if ($sh) {
if (is_int($sh)) {
if ($sh > 0) {
--$sh;
continue;
}
} elseif ($bt['function'] != $sh) {
$sh = null;
continue;
}
}
$output .= $bt['file'] . ':' . $bt['line'] . ' ';
$output .= "{$bt['class']}{$bt['type']}{$bt['function']}({$args})\n";
}
return $output;
}