An error occurred while loading the file. Please try again.
-
Côme Bernigaud authored616b9a38
<?php
/*----------------------------------------------------------------------
* Title.........: Debug Lib
* Version.......: 0.5.4
* Author........: Thomas Schler <tulpe@atomar.de>
* Filename......: debuglib.php(s)
* Last changed..: 16. July 2003
* License.......: Free to use. Postcardware ;)
*
*-----------------------------------------------------------------------
*
* Functions in this library:
*
* print_a( array array [,int mode] )
* prints arrays in a readable, understandable form.
* if mode is defined the function returns the output instead of
* printing it to the browser
*
* show_vars([int mode])
* use this function on the bottom of your script to see all
* superglobals and global variables in your script in a nice
* formated way
*
* show_vars() without parameter shows $_GET, $_POST, $_SESSION,
* $_FILES and all global variables you've defined in your script
*
* show_vars(1) shows $_SERVER and $_ENV in addition
*
* Happy debugging and feel free to email me your comments.
*
* History: (starting with version 0.5.3 at 2003-02-24)
*
* - added tooltips to the td's showing the type of keys and values (thanks Itomic)
* 2003-07-16
* - pre() function now trims trailing tabs
----------------------------------------------------------------------*/
// This file must be the first include on your page.
/* used for tracking of generation-time */
{
$MICROTIME_START = microtime();
@$GLOBALS_initial_count = count($GLOBALS);
}
/*!
* \file functions_debug.inc
* Source code for print_a class
* and helper function
*/
/*!
* \brief print_a class and helper function
* prints out an array in a more readable way
* than print_r()
*
* based on the print_a() function from
* Stephan Pirson (Saibot)
*/
class Print_a_class {
// this can be changed to FALSE if you don't like the fancy string formatting
var $look_for_leading_tabs = TRUE;
var $output;
var $iterations;
var $key_bg_color = '1E32C8';
var $value_bg_color = 'DDDDEE';
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
var $fontsize = '8pt';
var $keyalign = 'center';
var $fontfamily = 'Verdana';
var $export_flag;
var $show_object_vars;
var $export_dumper_path = 'http://tools.www.mdc.xmc.de/print_a_dumper/print_a_dumper.php';
/* i'm still working on the dumper! don't use it now
* put the next line into the print_a_dumper.php file (optional)
* print htmlspecialchars( stripslashes ( $_POST['array'] ) ); */
var $export_hash;
/*!
* \brief Print_a_class constructor
*/
function __construct()
{
$this->export_hash = uniqid('');
}
/*! recursive function!
* if print_a() was called with a fourth parameter (1 or 2)
* and you click on the table a window opens with only the output of print_a() in it
* 1 = serialized array
* 2 = normal print_a() display
*
* put the following code on the page defined with $export_dumper_path;
* --->%---- snip --->%----
* if($_GET['mode'] == 1) {
* print htmlspecialchars( stripslashes ( $_POST['array'] ) );
* } elseif($_GET['mode'] == 2) {
* print_a(unserialize( stripslashes($_POST['array'])) );
* }
* ---%<---- snip ---%<----
*
*
* \param array $array
*
* \param boolean $iteration false
*
* \param boolean $key_bg_colo false
*/
function print_a($array, $iteration = FALSE, $key_bg_color = FALSE)
{
$key_bg_color or $key_bg_color = $this->key_bg_color;
if (!$iteration && isset($this->export_flag)) {
$this->output .= '<form id="pa_form_'.$this->export_hash.'" action="'.$this->export_dumper_path.'?mode='.$this->export_flag.'" method="post" target="_blank"><input name="array" type="hidden" value="'.htmlspecialchars( serialize( $array ) ).'"></form>';
}
// lighten up the background color for the key td's =)
if ($iteration) {
for ($i = 0; $i < 6; $i += 2) {
$c = substr( $key_bg_color, $i, 2 );
$c = hexdec( $c );
( $c += 15 ) > 255 and $c = 255;
isset($tmp_key_bg_color) or $tmp_key_bg_color = '';
$tmp_key_bg_color .= sprintf( "%02X", $c );
}
$key_bg_color = $tmp_key_bg_color;
}
// build a single table ... may be nested
$this->output .= '<table style="border:none;" cellspacing="1" '.( !$iteration && $this->export_flag ? 'onClick="document.getElementById(\'pa_form_'.$this->export_hash.'\').submit();" )' : '' ).'>';
foreach ($array as $key => $value) {
$value_style = 'color:black;';
$key_style = 'color:white;';
$type = gettype($value);
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
// change the color and format of the value
switch ($type) {
case 'array':
break;
case 'object':
$key_style = 'color:#FF9B2F;';
break;
case 'integer':
$value_style = 'color:green;';
break;
case 'double':
$value_style = 'color:red;';
break;
case 'bool':
$value_style = 'color:blue;';
break;
case 'resource':
$value_style = 'color:darkblue;';
break;
case 'string':
if ($this->look_for_leading_tabs && preg_match('/^\t/m', $value)) {
$search = array('/\t/', "/\n/");
$replace = array(' ','<br />');
$value = preg_replace( $search, $replace, htmlspecialchars($value));
$value_style = 'color:black;border:1px gray dotted;';
} else {
$value_style = 'color:black;';
$value = nl2br(htmlspecialchars($value));
}
break;
}
$this->output .= '<tr>';
$this->output .= '<td nowrap align="'.$this->keyalign.'" style="background-color:#'.$key_bg_color.';'.$key_style.';font:bold '.$this->fontsize.' '.$this->fontfamily.';" title="'.gettype( $key ).'['.$type.']">';
$this->output .= $key;
$this->output .= '</td>';
$this->output .= '<td nowrap="nowrap" style="background-color:#'.$this->value_bg_color.';font: '.$this->fontsize.' '.$this->fontfamily.'; color:black;">';
// value output
if ($type == 'array') {
if (count($value)) {
$this->print_a( $value, TRUE, $key_bg_color );
} else {
$this->output .= '<div style="color:blue;">Array (empty)</div>';
}
} elseif ($type == 'object') {
if ($this->show_object_vars) {
$this->print_a( get_object_vars( $value ), TRUE, $key_bg_color );
} else {
$this->output .= '<div style="'.$value_style.'">OBJECT - '.get_class($value).'</div>';
}
} else {
$this->output .= '<div style="'.$value_style.'" title="'.$type.'">'.$value.'</div>';
}
$this->output .= '</td>';
$this->output .= '</tr>';
}
$this->output .= '</table>';
}
}
211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
/*
* \brief helper function.. calls print_a() inside the print_a_class
*
* \param array $array
*
* \param boolean $return_mode false
*
* \param boolean $show_object_vars false
*
* \param boolean $export_flag false
*/
function print_a($array, $return_mode = FALSE, $show_object_vars = FALSE, $export_flag = FALSE )
{
$e = error_reporting(0);
if (is_array($array) or is_object($array)) {
$pa = new Print_a_class;
if ($show_object_vars) {
$pa->show_object_vars = TRUE;
}
if ($export_flag) {
$pa->export_flag = $export_flag;
}
$pa->print_a($array);
$output = &$pa->output;
} else {
$output = '<span style="color:red;font-size:small;">print_a( '.gettype( $array ).' )</span>';
}
error_reporting ($e);
if ($return_mode) {
return $output;
} else {
print $output;
return TRUE;
}
}
function _script_globals()
{
global $GLOBALS_initial_count;
$varcount = 0;
foreach ($GLOBALS as $GLOBALS_current_key => $GLOBALS_current_value) {
if (++$varcount > $GLOBALS_initial_count) {
/* die wollen wir nicht! */
if ($GLOBALS_current_key != 'HTTP_SESSION_VARS' && $GLOBALS_current_key != '_SESSION') {
$script_GLOBALS[$GLOBALS_current_key] = $GLOBALS_current_value;
}
}
}
unset($script_GLOBALS['GLOBALS_initial_count']);
return $script_GLOBALS;
}
/*!
* \brief Show the runtime
*/
function show_runtime()
{
$MICROTIME_END = microtime();
$MICROTIME_START = explode(' ', $GLOBALS['MICROTIME_START']);
$MICROTIME_END = explode(' ', $MICROTIME_END);
$GENERATIONSEC = $MICROTIME_END[1] - $MICROTIME_START[1];
$GENERATIONMSEC = $MICROTIME_END[0] - $MICROTIME_START[0];
$GENERATIONTIME = substr($GENERATIONSEC + $GENERATIONMSEC, 0, 8);
281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340
return '<span style="color:red;font-weight:normal;font-size:9px;">(runtime: '.$GENERATIONTIME.' sec)</span>';
}
/*!
* \brief function shows all superglobals and script defined global variables
* show_vars() without the first parameter shows all superglobals except $_ENV and $_SERVER
* show_vars(1) shows all
* show_vars(,1) shows object properties in addition
*/
function show_vars($show_all_vars = FALSE, $show_object_vars = FALSE)
{
if (isset($GLOBALS['no_vars'])) {
return;
}
$script_globals = _script_globals();
print '
<style type="text/css">
.vars-container {
font-family: Verdana, Arial, Helvetica, Geneva, Swiss, SunSans-Regular, sans-serif;
font-size: 8pt;
padding:5px;
}
.varsname {
font-weight:bold;
}
</style>
';
print '<br />
<div style="border-style:dotted;border-width:1px;padding:2px;font-family:Verdana;font-size:10pt;font-weight:bold;">
DEBUG '.show_runtime().'
';
$vars_arr['script_globals'] = array('global script variables', '#7ACCC8');
$vars_arr['_GET'] = array('$_GET', '#7DA7D9');
$vars_arr['_POST'] = array('$_POST', '#F49AC1');
$vars_arr['_FILES'] = array('$_POST FILES', '#82CA9C');
$vars_arr['_SESSION'] = array('$_SESSION', '#FCDB26');
$vars_arr['_COOKIE'] = array('$_COOKIE', '#A67C52');
if ($show_all_vars) {
$vars_arr['_SERVER'] = array('SERVER', '#A186BE');
$vars_arr['_ENV'] = array('ENV', '#7ACCC8');
}
foreach ($vars_arr as $vars_name => $vars_data) {
if ($vars_name != 'script_globals') global $$vars_name;
if ($$vars_name) {
print '<div class="vars-container" style="background-color:'.$vars_data[1].';"><span class="varsname">'.$vars_data[0].'</span><br />';
print_a($$vars_name, FALSE, $show_object_vars, FALSE );
print '</div>';
}
}
print '</div>';
}
?>