<?php
$utils_start_time=microtime(true);
register_shutdown_function('utils_finished');
set_error_handler('error_handler');
$e_user_error_levels=array(
0=>'E_USER_DEBUG', E_ERROR=>'E_ERROR',
E_WARNING=>'E_WARNING', E_PARSE=>'E_PARSE',
E_NOTICE=>'E_NOTICE', E_CORE_ERROR=>'E_CORE_ERROR',
E_CORE_WARNING=>'E_CORE_WARNING', E_COMPILE_ERROR=>'E_COMPILE_ERROR',
E_COMPILE_WARNING=>'E_COMPILE_WARNING', E_USER_ERROR=>'E_USER_ERROR',
E_USER_WARNING=>'E_USER_WARNING', E_USER_NOTICE=>'E_USER_NOTICE',
E_STRICT=>'E_STRICT', E_RECOVERABLE_ERROR=>'E_RECOVERABLE_ERROR',
E_DEPRECATED=>'E_DEPRECATED', E_USER_DEPRECATED=>'E_USER_DEPRECATED'
);
function utils_finished()
{
global $utils_start_time;
$duration=1000*(microtime(true)-$utils_start_time);
$duration=round($duration, 3);
$mem=(integer)(memory_get_usage()/1024);
print "<hr />Duration: $duration msec Memory: $mem kb\n";
print "<button name='refresh' onclick='window.location.reload()'>refresh</button>\n";
print " <a href=\"../\">Return to docs</a><br /><br />\n</html>";
}
function logger($msg, $level=0)
{
global $statuslog,$e_user_error_levels;
$statuslog.=(isset($e_user_error_levels[$level]) ?
$e_user_error_levels[$level] : 'ERROR' )
. ':' . $msg . "\n";
}
function error_handler($errno, $errstr, $errfile, $errline)
{
$msg="Error $errno: $errstr : at line $errline of $errfile";
return niceDebugBacktrace($msg);
}
function niceDebugBacktrace($msg)
{
global $statuslog;
// from http://makandracards.com/magento/8123-pretty-backtrace-stack-trace
$d = debug_backtrace();
array_shift($d);
array_shift($d);
$out = $msg . "\n";
$c1width = strlen(count($d) + 1);
$c2width = 0;
$basepath=dirname(dirname(__FILE__));
foreach ($d as &$f) {
if (!isset($f['file'])) $f['file'] = '';
if (!isset($f['line'])) $f['line'] = '';
if (!isset($f['class'])) $f['class'] = '';
if (!isset($f['type'])) $f['type'] = '';
$f['file_rel'] = str_replace($basepath, '', $f['file']);
$thisLen = strlen($f['file_rel'] . ':' . $f['line']);
if ($c2width < $thisLen) $c2width = $thisLen;
}
foreach ($d as $i => $f) {
$args = '';
if (isset($f['args'])) {
$args = array();
foreach ($f['args'] as $arg) {
if (is_object($arg)) {
$str = get_class($arg);
} elseif (is_array($arg)) {
$str = 'Array';
} elseif (is_numeric($arg)) {
$str = $arg;
} else {
$str = "'$arg'";
}
$args[] = $str;
}
$args = implode(', ', $args);
}
$out .= sprintf(
"[%{$c1width}s] %-{$c2width}s %s%s%s(%s)\n",
$i,
$f['file_rel'] . ':' . $f['line'],
$f['class'],
$f['type'],
$f['function'],
$args
);
}
$stderr = fopen('php://stderr', 'w');
fwrite($stderr,$out.$statuslog);
print "<pre>$out</pre><hr /><pre>$statuslog</pre>";
return false;
}
|