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"; } }