[Phpsysinfo-subversion] SF.net SVN: phpsysinfo: [12] phpsysinfo/objects
Brought to you by:
namiltd
From: <big...@us...> - 2007-01-05 17:18:10
|
Revision: 12 http://phpsysinfo.svn.sourceforge.net/phpsysinfo/?rev=12&view=rev Author: bigmichi1 Date: 2007-01-05 09:18:08 -0800 (Fri, 05 Jan 2007) Log Message: ----------- include a backtrace function, so no longer needs to pass __FILE__ and __LINE__ to addError Modified Paths: -------------- phpsysinfo/objects/class.Cookie.inc.php phpsysinfo/objects/class.Error.inc.php phpsysinfo/objects/class.Functions.inc.php phpsysinfo/objects/class.Ini.inc.php phpsysinfo/objects/class.Language.inc.php Modified: phpsysinfo/objects/class.Cookie.inc.php =================================================================== --- phpsysinfo/objects/class.Cookie.inc.php 2007-01-05 17:12:19 UTC (rev 11) +++ phpsysinfo/objects/class.Cookie.inc.php 2007-01-05 17:18:08 UTC (rev 12) @@ -108,7 +108,7 @@ setcookie( $strName, $strValue, $this->time ); break; default: - $this->objError->addError( get_class( $this ) . ":__get()", "\"" . $strName . "\" Cookie value not set, wrong specified?", __LINE__, __FILE__ ); + $this->objError->addError( get_class( $this ) . ":__get()", "\"" . $strName . "\" Cookie value not set, wrong specified?" ); } } Modified: phpsysinfo/objects/class.Error.inc.php =================================================================== --- phpsysinfo/objects/class.Error.inc.php 2007-01-05 17:12:19 UTC (rev 11) +++ phpsysinfo/objects/class.Error.inc.php 2007-01-05 17:18:08 UTC (rev 12) @@ -93,14 +93,10 @@ * @access public * @param string Command, which cause the Error * @param string additional Message, to describe the Error - * @param integer on which line the Error occours - * @param string in which File the Error occours **/ - public function addError( $strCommand, $strMessage, $intLine, $strFile ) { + public function addError( $strCommand, $strMessage) { $this->arrErrorList[$this->errors]['command'] = $strCommand; - $this->arrErrorList[$this->errors]['message'] = $strMessage; - $this->arrErrorList[$this->errors]['line'] = $intLine; - $this->arrErrorList[$this->errors]['file'] = basename( $strFile ); + $this->arrErrorList[$this->errors]['message'] = $this->trace( $strMessage ); $this->errors++; } @@ -127,8 +123,6 @@ $strWARNString = ""; $strHTMLhead = "<table width=\"100%\" border=\"0\">\n" . "\t<tr>\n" - . "\t\t<td><font size=\"-1\"><b>File</b></font></td>\n" - . "\t\t<td><font size=\"-1\"><b>Line</b></font></td>\n" . "\t\t<td><font size=\"-1\"><b>Command</b></font></td>\n" . "\t\t<td><font size=\"-1\"><b>Message</b></font></td>\n" . "\t</tr>\n"; @@ -140,10 +134,8 @@ $strWARNString .= "<font size=\"-1\"><b>WARNING: " . str_replace( "\n", "<br/>", htmlspecialchars( $arrLine['message'] ) ) . "</b></font><br/>\n"; } else { $strHTMLString .= "\t<tr>\n" - . "\t\t<td><font size=\"-1\">" . htmlspecialchars( $arrLine['file'] ) . "</font></td>\n" - . "\t\t<td><font size=\"-1\">" . $arrLine['line'] . "</font></td>\n" . "\t\t<td><font size=\"-1\">" . htmlspecialchars( $arrLine['command'] ) . "</font></td>\n" - . "\t\t<td><font size=\"-1\">" . str_replace( "\n", "<br/>", htmlspecialchars( $arrLine['message'] ) ) . "</font></td>\n" + . "\t\t<td><font size=\"-1\">" . str_replace( "\n", "<br/>", $arrLine['message'] ) . "</font></td>\n" . "\t</tr>\n"; } } @@ -171,5 +163,75 @@ return false; } } + + /** + * generate a function backtrace for error diagnostic, function is genearally based on code submitted in the php reference page + * + * @param string additional message to display + * @return string formatted string of the backtrace + */ + private function trace( $strMessage ) { + $arrTrace = array_reverse( debug_backtrace() ); + $strFunc = ''; + + $strBacktrace .= htmlspecialchars( $strMessage ) . "\n\n"; + + foreach( $arrTrace as $val) + { + // avoid the last line, which says the error is from the error class + if( $val == $arrTrace[count( $arrTrace ) - 1]) { + break; + } + $strBacktrace .= $strIndent . str_replace( APP_ROOT, ".", $val['file'] ).' on line ' . $val['line']; + if( $strFunc ) { + $strBacktrace .= ' in function ' . $strFunc; + } + if( $val['function'] == 'include' || $val['function'] == 'require' || $val['function'] == 'include_once' || $val['function'] == 'require_once' ) { + $strFunc = ''; + } else { + $strFunc = $val['function'] . '('; + if( isset( $val['args'][0] ) ) { + $strFunc .= ' '; + $strComma = ''; + foreach( $val['args'] as $val ) { + $strFunc .= $strComma . $this->print_var( $val ); + $strComma = ', '; + } + $strFunc .= ' '; + } + $strFunc .= ')'; + } + $strBacktrace .= "\n"; + } + return $strBacktrace; + } + + /** + * convert some special vars into better readable output + * + * @param mixed value, wchich should be formatted + * @return string formatted string + */ + private function print_var( $var ) { + if( is_string( $var ) ) { + return( '"' . str_replace( array("\x00", "\x0a", "\x0d", "\x1a", "\x09"), array('\0', '\n', '\r', '\Z', '\t'), $var ) . '"' ); + } elseif( is_bool( $var ) ) { + if( $var ) { + return( 'true' ); + } else { + return( 'false' ); + } + } elseif( is_array( $var ) ) { + $strResult = 'array( '; + $strComma = ''; + foreach( $var as $key => $val ) { + $strResult .= $strComma . $this->print_var( $key ).' => ' . $this->print_var( $val ); + $strComma = ', '; + } + $strResult .= ' )'; + return( $strResult ); + } + return( var_export( $var, true ) ); // anything else, just let php try to print it + } } ?> Modified: phpsysinfo/objects/class.Functions.inc.php =================================================================== --- phpsysinfo/objects/class.Functions.inc.php 2007-01-05 17:12:19 UTC (rev 11) +++ phpsysinfo/objects/class.Functions.inc.php 2007-01-05 17:18:08 UTC (rev 12) @@ -52,12 +52,12 @@ closedir( $handle ); } else { if( $booErrorRep ) { - $objError->addError( 'opendir(' . $strPath . ')', 'directory can not be read by phpsysinfo', __LINE__, __FILE__ ); + $objError->addError( 'opendir(' . $strPath . ')', 'directory can not be read by phpsysinfo' ); } } } else { if( $booErrorRep ) { - $objError->addError( 'is_dir(' . $strPath . ')', 'directory does not exist on your machine', __LINE__, __FILE__ ); + $objError->addError( 'is_dir(' . $strPath . ')', 'directory does not exist on your machine' ); } } return $arrDirectoryContent; Modified: phpsysinfo/objects/class.Ini.inc.php =================================================================== --- phpsysinfo/objects/class.Ini.inc.php 2007-01-05 17:12:19 UTC (rev 11) +++ phpsysinfo/objects/class.Ini.inc.php 2007-01-05 17:18:08 UTC (rev 12) @@ -87,7 +87,7 @@ $this->arrOptionList = @parse_ini_file( APP_ROOT . "/config.ini", true ); if( !$this->arrOptionList ) { - $this->objError->addError( get_class( $this ) . ":__construct", "config.ini can't be read", __LINE__, __FILE__ ); + $this->objError->addError( get_class( $this ) . ":__construct", "config.ini can't be read" ); } } @@ -102,7 +102,7 @@ if( isset( $this->arrOptionList[$strName] ) ) { return $this->arrOptionList[$strName]; } else { - $this->objError->addError( get_class( $this ) . ":__get()", "\"" . $strName . "\" is not defined in config.php", __LINE__, __FILE__ ); + $this->objError->addError( get_class( $this ) . ":__get()", "\"" . $strName . "\" is not defined in config.php" ); } } } Modified: phpsysinfo/objects/class.Language.inc.php =================================================================== --- phpsysinfo/objects/class.Language.inc.php 2007-01-05 17:12:19 UTC (rev 11) +++ phpsysinfo/objects/class.Language.inc.php 2007-01-05 17:18:08 UTC (rev 12) @@ -167,7 +167,7 @@ $this->strCurrentLang = $strLang; $this->objCookie->Language = $strLang; } else { - $this->objError->addError('include(' . $strLang . ')', 'we do not support this language, default language set.', __LINE__, __FILE__ ); + $this->objError->addError('include(' . $strLang . ')', 'we do not support this language, default language set.' ); if( $this->objIni->Default_Language ) { $this->setLanguage( $this->objIni->Default_Language ); } else { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |