note 76900 added to function.set-error-handler

From: Date: Sat, 04 Aug 2007 10:38:05 +0000
Subject: note 76900 added to function.set-error-handler
Groups: php.notes 
Request: Send a blank email to php-notes+get-129172@lists.php.net to get a copy of this message
error handling function that handles both errors and exceptions; also features a backtrace including possible function arguments. <?php $cfg = array(); $cfg['debug'] = 1; $cfg['adminEmail'] = 'name@domain.tld'; function errorHandler($errno, $errstr='', $errfile='', $errline='') { // if error has been supressed with an @ if (error_reporting() == 0) { return; } global $cfg; // check if function has been called by an exception if(func_num_args() == 5) { // called by trigger_error() $exception = null; list($errno, $errstr, $errfile, $errline) = func_get_args(); $backtrace = array_reverse(debug_backtrace()); }else { // caught exception $exc = func_get_arg(0); $errno = $exc->getCode(); $errstr = $exc->getMessage(); $errfile = $exc->getFile(); $errline = $exc->getLine(); $backtrace = $exc->getTrace(); } $errorType = array ( E_ERROR => 'ERROR', E_WARNING => 'WARNING', E_PARSE => 'PARSING ERROR', E_NOTICE => 'NOTICE', E_CORE_ERROR => 'CORE ERROR', E_CORE_WARNING => 'CORE WARNING', E_COMPILE_ERROR => 'COMPILE ERROR', E_COMPILE_WARNING => 'COMPILE WARNING', E_USER_ERROR => 'USER ERROR', E_USER_WARNING => 'USER WARNING', E_USER_NOTICE => 'USER NOTICE', E_STRICT => 'STRICT NOTICE', E_RECOVERABLE_ERROR => 'RECOVERABLE ERROR' ); // create error message if (array_key_exists($errno, $errorType)) { $err = $errorType[$errno]; } else { $err = 'CAUGHT EXCEPTION'; } $errMsg = "$err: $errstr in $errfile on line $errline"; // start backtrace foreach ($backtrace as $v) { if (isset($v['class'])) { $trace = 'in class '.$v['class'].'::'.$v['function'].'('; if (isset($v['args'])) { $separator = ''; foreach($v['args'] as $arg ) { $trace .= "$separator".getArgument($arg); $separator = ', '; } } $trace .= ')'; } elseif (isset($v['function']) && empty($trace)) { $trace = 'in function '.$v['function'].'('; if (!empty($v['args'])) { $separator = ''; foreach($v['args'] as $arg ) { $trace .= "$separator".getArgument($arg); $separator = ', '; } } $trace .= ')'; } } // display error msg, if debug is enabled if($cfg['debug'] == 1) { echo '<h2>Debug Msg</h2>'.nl2br($errMsg).'<br /> Trace: '.nl2br($trace).'<br />'; } // what to do switch ($errno) { case E_NOTICE: case E_USER_NOTICE: return; break; default: if($cfg['debug'] == 0){ // send email to admin if(!empty($cfg['adminEmail'])) { @mail($cfg['adminEmail'],'critical error on '.$_SERVER['HTTP_HOST'], $errorText, 'From: Error Handler'); } // end and display error msg exit(displayClientMessage()); } else exit('<p>aborting.</p>'); break; } } // end of errorHandler() function displayClientMessage() { echo 'some html page with error message'; } function getArgument($arg) { switch (strtolower(gettype($arg))) { case 'string': return( '"'.str_replace( array("\n"), array(''), $arg ).'"' ); case 'boolean': return (bool)$arg; case 'object': return 'object('.get_class($arg).')'; case 'array': $ret = 'array('; $separtor = ''; foreach ($arg as $k => $v) { $ret .= $separtor.getArgument($k).' => '.getArgument($v); $separtor = ', '; } $ret .= ')'; return $ret; case 'resource': return 'resource('.get_resource_type($arg).')'; default: return var_export($arg, true); } } ?> ---- Server IP: 69.147.83.197 Probable Submitter: 91.19.8.1 ---- Manual Page -- http://www.php.net/manual/en/function.set-error-handler.php Edit -- https://master.php.net/note/edit/76900 Del: integrated -- https://master.php.net/note/delete/76900/integrated Del: useless -- https://master.php.net/note/delete/76900/useless Del: bad code -- https://master.php.net/note/delete/76900/bad+code Del: spam -- https://master.php.net/note/delete/76900/spam Del: non-english -- https://master.php.net/note/delete/76900/non-english Del: in docs -- https://master.php.net/note/delete/76900/in+docs Del: other reasons-- https://master.php.net/note/delete/76900 Reject -- https://master.php.net/note/reject/76900 Search -- https://master.php.net/manage/user-notes.php

« previous php.notes (#129172) next »