send(); // fatal error, quit via serverReturnPlugin.php } // best to fail on php warnings (non user generated) too if ($type == 'warning' && $error['origin'] == 'php'){ $GLOBALS['RETURN_PLUGIN']->send(); // fatal error, quit via serverReturnPlugin.php } // for other warnings and notices, we'll let the script continue and decide // what to do (the only php generated errors that don't exit are notices) return true; } // activate custom error_handler set_error_handler('error_handler'); // define global error collection $GLOBALS['ALL_ERRORS'] = array(); /* Example if (!true){ trigger_error("An non-fatal error has occurred", E_USER_WARNING); } ..script continues.... */ /* when returning data to client, return data as an array with one element representing any errors collected. */ function getErrorAsAssocArray ($level,$message,$file,$line){ $error = array(); $error['level'] = $level; $error['message'] = $message; $error['file'] = $file; $error['line'] = $line; // to the defaults, we add some useful things $error['type'] = getErrorTypeFromLevel($level); // notice, warning, fatal, uknown $error['origin'] = getErrorOriginFromLevel($level); // user generated? return $error; } function getErrorTypeFromLevel ($level){ $type = ''; if ($level == E_USER_WARNING || $level == E_WARNING){ $type = 'warning'; } elseif ($level == E_USER_NOTICE || $level == E_NOTICE){ $type = 'notice'; } elseif ($level == E_USER_ERROR || $level == E_RECOVERABLE_ERROR){ $type = 'fatal'; } else { $type = 'unknown'; } return $type; } function getErrorOriginFromLevel($level){ $origin = 'php'; if ($level == E_USER_WARNING || $level == E_USER_NOTICE || $level == E_USER_ERROR){ $origin = 'user'; // this was a user generated error } return $origin; } function writeErrorToLog($error){ $type = $error['type']; $message = $error['message']; $file = $error['file']; $line = $error['line']; $origin = strtoupper($error['origin']); // log error (timestamp is added by logger) // '[timestamp]Caught USER fatal error: "blah blah blah." in file "filename" at line "#". $logString = "\n".'Caught '.$origin.' '.$type.' error: "'.$message.'" in file "'.$file.'" at line "'.$line.'".'."\n"; error_log($logString); } ?>