Server : Apache System : Linux iZ2vcgyutqttsd1p850kl8Z 3.10.0-1160.92.1.el7.x86_64 #1 SMP Tue Jun 20 11:48:01 UTC 2023 x86_64 User : www ( 1000) PHP Version : 5.6.40 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv Directory : /www/wwwroot/saimikebio.com/mobile/include/ |
<?php /************************************************ ** Title.........: PHP4+ Debug Helper ** Author........: Thomas Sch쟬er <code at atomar dot de> ** Filename......: debuglib.php(s) ** Last changed..: 12.07.2004 14:13 ** License.......: Free to use. Postcardware ;) ** ************************************************* ** ** Functions in this library: ** ** print_a( array array [,int returnmode] [,bool show object vars] [,int max entries] ) ** ** prints arrays in a readable form. ** if mode is defined the function returns the output instead of printing it to the output buffer ** ** print_a( $array, #, 1 ) shows also object properties ** print_a( $array, 1, # ) returns the table as a string instead of printing it to the output buffer ** print_a( $array, 'WindowName', #) opens the output in a window indentified by the string. ** print_a( $array, '_WindowName', #) prints the array inside a frame (<fieldset><label>WindowName</label>...</fieldset>) ** print_a( $array, 3, # ) opens a new browser window with a serialized version of your array (save as a textfile and can it for later use ;). ** ** show_vars( [bool verbose] [, bool show_object_vars ] [, int limit] ) ** ** 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 ** show_vars(#,1) shows also object properties ** show_vars(#, #, 15) shows only the first 15 entries in a numerical keyed array (or an array with more than 50 entries) ( standard is 5 ) ** show_vars(#, #, 0) shows all entries ** ** ** ** ** print_result( result_handle ) ** ** prints a mysql_result set returned by mysql_query() as a table ** this function is work in progress! use at your own risk ** ** ** Happy debugging and feel free to email me your comments. ** ** ** ** History: (starting 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 tabulators ** 2003-08-01 ** - silly version removed.. who needs a version for such a thing ;) ** 2003-09-24 ** - changed the parameters of print_a() a bit ** see above ** - addet the types NULL and bolean to print_a() ** - print_a() now replaces trailing spaces in string values with red underscores ** 2003-09-24 (later that day ;) ** - oops.. fixed the print_a() documentation.. parameter order was wrong ** - added mode 3 to the second parameter ** 2003-09-25 ** - added a limit parameter to the show_vars() and print_a() functions ** default for show_vars() is 5 ** show_vars(#,#, n) changes that (0 means show all entries) ** print_a() allways shows all entries by default ** print_a(#,#,#, n) changes that ** ** this parameter is used to limit the output of arrays with a numerical index (like long lists of similiar elements) ** i added this option for performance reasons ** it has no effect on arrays where one ore more keys are not number-strings ** 2003-09-27 ** - reworked the pre() and _remove_exessive_leading_tabs() functions ** they now work like they should :) ** - some cosmetic changes ** 2003-10-28 ** - fixed multiline string display ** 2003-11-14 ** - argh! uploaded the wrong version :/ ... fixed.. sorry ** 2003-11-16 ** - fixed a warning triggered by _only_numeric_keys() ** thanx Peter Valdemar :) ** - fixed a warning when print_a was called directly on an object ** thanx Hilton :) ** 2003-12-01 ** - added slashes in front of the print_a(#,3) output ** 2004-03-17 ** - fixed a problem when print_a(#,2) was called on an array containing newlines ** 2004-03-26 ** - added a variation of mode 2 for print_a(). ** when a string is passed as the second parameter, a new window with the string as prefix gets opened for every differend string.. #TODO_COMMENT# ** 2004-07-12 ** - print_a($array, '_MyLabel') draws a frame with a label around the output ************************************************/ if (!defined('USE_DEBUGLIB')) define('USE_DEBUGLIB', true); if (USE_DEBUGLIB) { # This file must be the first include on your page. /* used for tracking of generation-time */ { $MICROTIME_START = microtime(); @$GLOBALS_initial_count = count($GLOBALS); } /************************************************ ** 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 true if you want var $look_for_leading_tabs = false; var $output; var $iterations; var $key_bg_color = '1E32C8'; var $value_bg_color = 'DDDDEE'; var $fontsize = '8pt'; var $keyalign = 'left'; var $fontfamily = 'Verdana'; var $show_object_vars; var $limit; // function Print_a_class() {} # recursive function! /* this internal function looks if the given array has only numeric values as */ function _only_numeric_keys( $array ) { $test = true; if (is_array($array)) { foreach ( array_keys( $array ) as $key ) { if( !is_numeric( $key ) ) $test = false; /* #TODO# */ } return $test; } else { return false; } } function _handle_whitespace( $string ) { $string = str_replace(' ', ' ', $string); $string = preg_replace(array('/ $/', '/^ /'), '<span style="color:red;">_</span>', $string); /* replace spaces at the start/end of the STRING with red underscores */ $string = preg_replace('/\t/', ' <span style="border-bottom:#'.$this->value_bg_color.' solid 1px;"> </span>', $string); /* replace tabulators with '_ _' */ return $string; } function print_a($array, $iteration = false, $key_bg_color = false) { $key_bg_color or $key_bg_color = $this->key_bg_color; # 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">'; $only_numeric_keys = ($this->_only_numeric_keys( $array ) || count( $array ) > 50); $i = 0; foreach ($array as $key => $value) { if( $only_numeric_keys && $this->limit && $this->limit == $i++ ) break; /* if print_a() was called with a fourth parameter #TODO# */ $value_style_box = 'color:black;'; $key_style = 'color:white;'; $type = gettype( $value ); # print $type.'<br />'; # change the color and format of the value and set the values title $type_title = $type; $value_style_content = ''; switch( $type ) { case 'array': if( empty( $value ) ) $type_title = 'empty array'; break; case 'object': $key_style = 'color:#FF9B2F;'; break; case 'integer': $value_style_box = 'color:green;'; break; case 'double': $value_style_box = 'color:blue;'; break; case 'boolean': if( $value == true ) { $value_style_box = 'color:#D90081;'; } else { $value_style_box = 'color:#84009F;'; } break; case 'NULL': $value_style_box = 'color:darkorange;'; break; case 'string': if( $value == '' ) { $value_style_box = 'color:darkorange;'; $value = "''"; $type_title = 'empty string'; } else { $value_style_box = 'color:black;'; $value = htmlspecialchars( $value ); if( $this->look_for_leading_tabs && _check_for_leading_tabs( $value ) ) { $value = _remove_exessive_leading_tabs( $value ); } $value = $this->_handle_whitespace( $value ); $value = nl2br($value); /* use different color for string background */ if(strstr($value, "\n")) $value_style_content = 'background:#ECEDFE;'; } break; } $this->output .= '<tr>'; $this->output .= '<td nowrap="nowrap" align="'.$this->keyalign.'" style="padding:0px 3px 0px 3px;background-color:#'.$key_bg_color.';'.$key_style.';font:bold '.$this->fontsize.' '.$this->fontfamily.';" title="'.gettype( $key ).'['.$type_title.']">'; $this->output .= $this->_handle_whitespace( $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' && preg_match('/#RAS/', $key) ) { /* only used for special recursive array constructs which i use sometimes */ $this->output .= '<div style="'.$value_style_box.'">recursion!</div>'; } elseif($type == 'array') { if( ! empty( $value ) ) { $this->print_a( $value, true, $key_bg_color ); } else { $this->output .= '<span style="color:darkorange;">[]</span>'; } } elseif($type == 'object') { if( $this->show_object_vars ) { $objects_class = get_class($value); $this->print_a( array('CLASS_NAME' => $objects_class), true, '204FB8' ); $this->print_a( array('CLASS_VARS' => get_class_vars( $objects_class )), true, '2066B8' ); $this->print_a( array('CLASS_METHODS' => get_class_methods( $objects_class )), true, '2067EB8' ); $this->print_a( array('OBJECT_VARS' => get_object_vars( $value )), true, '2095B8' ); } else { $this->output .= '<div style="'.$value_style_box.'">OBJECT</div>'; } } elseif($type == 'boolean') { $this->output .= '<div style="'.$value_style_box.'" title="'.$type.'">'.($value ? 'true' : 'false').'</div>'; } elseif($type == 'NULL') { $this->output .= '<div style="'.$value_style_box.'" title="'.$type.'">NULL</div>'; } else { $this->output .= '<div style="'.$value_style_box.'" title="'.$type.'"><span style="'.$value_style_content.'">'.$value.'</span></div>'; } $this->output .= '</td>'; $this->output .= '</tr>'; } $entry_count = count( $array ); $skipped_count = $entry_count - $this->limit; if( $only_numeric_keys && $this->limit && count($array) > $this->limit) { $this->output .= '<tr title="showing '.$this->limit.' of '.$entry_count.' entries in this array"><td style="text-align:right;color:darkgray;background-color:#'.$key_bg_color.';font:bold '.$this->fontsize.' '.$this->fontfamily.';">...</td><td style="background-color:#'.$this->value_bg_color.';font:'.$this->fontsize.' '.$this->fontfamily.';color:darkgray;">['.$skipped_count.' skipped]</td></tr>'; } $this->output .= '</table>'; } } # helper function.. calls print_a() inside the print_a_class function print_a( $array, $mode = 0, $show_object_vars = false, $limit = false ) { $output = ''; if( is_array( $array ) or is_object( $array ) ) { if( empty( $array ) ) { $output .= '<span style="color:red;font-size:small;">print_a( empty array )</span>'; } $pa = new Print_a_class; $show_object_vars and $pa->show_object_vars = true; if( $limit ) { $pa->limit = $limit; // $output .= '<span style="color:red;">showing only '.$limit.' entries for arrays with numeric keys</span>'; } if ( is_object($array) ) { $pa->print_a( get_object_vars($array) ); } else { $pa->print_a( $array ); } # $output = $pa->output; unset($pa); $output .= $pa->output; } elseif( gettype($array) == 'boolean') { $output .= '<span style="color:red;font-size:small;">print_a( '.($array === true ? 'true' : 'false').' )</span>'; } else { $output .= '<span style="color:red;font-size:small;">print_a( '.gettype( $array ).' )</span>'; } if($mode === 0 || $mode == NULL || $mode == false) { print $output; return true; } if($mode == 1) { return $output; } if(is_string($mode) || $mode == 2 ) { $debugwindow_origin = $_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"]; if(preg_match('/(.+)::(.+)/', $mode, $matches)) { $mode = $matches[1]; $remote_addr = gethostbyname($matches[2]); if($_SERVER['REMOTE_ADDR'] != $remote_addr) return; } if(preg_match('/^_(.*)/', $mode, $matches)) { #$output = "<table style=\"border:1px solid black;\" cellpadding=\"0\" cellspcing=\"0\"><tr><td style=\"background:#1E2B9E;color:white;font-weight:bold;padding:2px;\">{$matches[1]}</td></tr><tr><td>$output</td></tr></table>"; $output = "<fieldset style=\"width:100px;padding:2px;border:1px solid #666666;\"><legend>{$matches[1]}</legend>$output</fieldset><br />"; print $output; } else { print ' <script type="text/javascript" language="JavaScript"> var debugwindow; debugwindow = window.open("", "T_'.md5($_SERVER['HTTP_HOST']).(is_string($mode) ? $mode : '').'", "menubar=no,scrollbars=yes,resizable=yes,width=640,height=480"); debugwindow.document.open(); debugwindow.document.write("'.str_replace(array("\r\n", "\n", "\r"), '\n', addslashes($output)).'"); debugwindow.document.close(); debugwindow.document.title = "'.(is_string($mode) ? "($mode)" : '').' Debugwindow for : http://'.$debugwindow_origin.'"; debugwindow.focus(); </script> '; } } if($mode == 3) { print ' <script type="text/javascript" language="JavaScript"> var debugwindow; debugwindow = window.open("", "S_'.md5($_SERVER['HTTP_HOST']).'", "menubar=yes,scrollbars=yes,resizable=yes,width=640,height=480"); debugwindow.document.open(); debugwindow.document.write("unserialize(\''.str_replace("'", "\\'", addslashes( str_replace(array("\r\n", "\n", "\r"), '\n', serialize($array) ) ) ).'\');"); debugwindow.document.close(); debugwindow.document.title = "Debugwindow for : http://'.$debugwindow_origin.'"; debugwindow.focus(); </script> '; } } // shows mysql-result as a table.. # not ready yet :( function print_result($RESULT) { if(!$RESULT) return; if(mysql_num_rows($RESULT) < 1) return; $fieldcount = mysql_num_fields($RESULT); for ($i=0; $i<$fieldcount; $i++) { $tables[mysql_field_table($RESULT, $i)]++; } print ' <style type="text/css"> .rs_tb_th { font-family: Verdana; font-size:9pt; font-weight:bold; color:white; } .rs_f_th { font-family:Verdana; font-size:7pt; font-weight:bold; color:white; } .rs_td { font-family:Verdana; font-size:7pt; } </style> <script type="text/javascript" language="JavaScript"> var lastID; function highlight(id) { if(lastID) { lastID.style.color = "#000000"; lastID.style.textDecoration = "none"; } tdToHighlight = document.getElementById(id); tdToHighlight.style.color ="#FF0000"; tdToHighlight.style.textDecoration = "underline"; lastID = tdToHighlight; } </script> '; print '<table bgcolor="#000000" cellspacing="1" cellpadding="1">'; print '<tr>'; foreach ($tables as $tableName => $tableCount) { $col == '0054A6' ? $col = '003471' : $col = '0054A6'; print '<th colspan="'.$tableCount.'" class="rs_tb_th" style="background-color:#'.$col.';">'.$tableName.'</th>'; } print '</tr>'; print '<tr>'; for ($i=0;$i < mysql_num_fields($RESULT);$i++) { $FIELD = mysql_field_name($RESULT, $i); $col == '0054A6' ? $col = '003471' : $col = '0054A6'; print '<td align="center" bgcolor="#'.$col.'" class="rs_f_th">'.$FIELD.'</td>'; } print '</tr>'; mysql_data_seek($RESULT, 0); while ($DB_ROW = mysql_fetch_array($RESULT, MYSQL_NUM)) { $pointer++; if($toggle) { $col1 = "E6E6E6"; $col2 = "DADADA"; } else { $col1 = "E1F0FF"; $col2 = "DAE8F7"; } $toggle = !$toggle; print '<tr id="ROW'.$pointer.'" onMouseDown="highlight(\'ROW'.$pointer.'\');">'; foreach ($DB_ROW as $value) { $col == $col1 ? $col = $col2 : $col = $col1; print '<td valign="top" bgcolor="#'.$col.'" class="rs_td" nowrap>'.nl2br($value).'</td>'; } print '</tr>'; } print '</table>'; mysql_data_seek($RESULT, 0); } ###################### # reset the millisec timer # function reset_script_runtime() { $GLOBALS['MICROTIME_START'] = microtime(); } ###################### # function returns the milliseconds passed # function script_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); return (float) $GENERATIONTIME; } 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; } ###################### # 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, $limit = 5) { if($limit === 0) $limit = false; if(isset($GLOBALS['no_vars'])) return; $script_globals = _script_globals(); print ' <style type="text/css" media="screen"> .vars-container { font-family: Verdana, Arial, Helvetica, Geneva, Swiss, SunSans-Regular, sans-serif; font-size: 8pt; padding:5px; } .varsname { font-weight:bold; } .showvars { background:white; border-style:dotted; border-width:1px; padding:2px; font-family: Verdana, Arial, Helvetica, Geneva, Swiss, SunSans-Regular, sans-serif; font-size:10pt; font-weight:bold;" } </style> <style type="text/css" media="print"> .showvars { display:none; visibility:invisible; } </style> '; print '<br /> <div class="showvars"> DEBUG <span style="color:red;font-weight:normal;font-size:9px;">(runtime: '.script_runtime().' sec)</span> '; $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('$_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, NULL, $show_object_vars, $limit); print '</div>'; } } print '</div>'; } ###################### # function prints/returns strings wrapped between <pre></pre> # function pre( $string, $return_mode = false, $tabwidth = 3 ) { $tab = str_repeat(' ', $tabwidth); if (!function_exists('version_compare') || version_compare(phpversion(), '5.3.0', '<')) { $string = preg_replace('/\t+/em', "str_repeat( ' ', strlen('\\0') * $tabwidth );", $string); /* replace all tabs with spaces */ } else { include(ROOT_PATH . 'include' . DIRECTORY_SEPARATOR . 'patch' . DIRECTORY_SEPARATOR . 'includes_lib.debug_pre.php'); } $out = '<pre>'.$string."</pre>\n"; if($return_mode) { return $out; } else { print $out; } } function _check_for_leading_tabs( $string ) { return preg_match('/^\t/m', $string); } function _remove_exessive_leading_tabs( $string ) { /* remove whitespace lines at start of the string */ $string = preg_replace('/^\s*\n/', '', $string); /* remove whitespace at end of the string */ $string = preg_replace('/\s*$/', '', $string); # kleinste Anzahl von f쨲enden TABS z䨬en preg_match_all('/^\t+/', $string, $matches); $minTabCount = strlen(@min($matches[0])); # und entfernen $string = preg_replace('/^\t{'.$minTabCount.'}/m', '', $string); return $string; } } // use debuglib // Define no-op functions in case debug functions were accidentally left // in the live system. else { function print_a() {} function print_result() {} function reset_script_runtime() {} function script_runtime() {} function show_vars() {} function pre() {} } // don't use debuglib ?>