getCode(), $e->getMessage(), $e->getFile(), $e->getLine(), $e->getTraceAsString()); while (($e = $e->getPrevious())) { $msg .= sprintf("\nPrevious Exception. code: %s, message: %s\n%s : %s\n\nStack Trace:\n%s\n", $e->getCode(), $e->getMessage(), $e->getFile(), $e->getLine(), $e->getTraceAsString()); } echo $msg; // error_log( $msg ); strict_mode_mail_admin('Uncaught exception!', $msg); echo "\n\nNow exiting. Please report this problem to the software author\n\n"; exit(1); } /** * This shutdown handler callback prints a message and sends email on any PHP fatal error. */ function shutdown_handler() { $error = error_get_last(); $ignore = E_WARNING | E_NOTICE | E_USER_WARNING | E_USER_NOTICE | E_STRICT | E_DEPRECATED | E_USER_DEPRECATED; if ($error && ($error['type'] & $ignore) == 0) { // error keys: type, file, line, message $msg = "Ouch! Encountered PHP Fatal Error. Shutting down.\n".print_r($error, true); echo $msg; strict_mode_mail_admin('PHP Fatal Error!', $msg); } } /** * email admin if defined. */ function strict_mode_mail_admin($subject, $msg) { $subject = sprintf('[%s] [%s] %s [pid: %s]', gethostname(), basename($_SERVER['PHP_SELF']), $subject, getmypid()); if (defined('ALERTS_MAIL_TO')) { mail(ALERTS_MAIL_TO, $subject, $msg); } else { echo "\nWARNING: ALERTS_MAIL_TO not defined in environment. alert not sent with subject: $subject\n"; } }