From 8b4f4fc27564d75f392cf3ff440d50e3966d9aec Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Sat, 11 Jun 2016 09:47:23 +0200 Subject: [PATCH] Move to framework --- UnhandledHandler.php | 130 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 UnhandledHandler.php diff --git a/UnhandledHandler.php b/UnhandledHandler.php new file mode 100644 index 000000000..ae3a77f08 --- /dev/null +++ b/UnhandledHandler.php @@ -0,0 +1,130 @@ + + * @author Dennis Eichhorn + * @copyright 2013 Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://orange-management.com + */ +namespace phpOMS; + +use phpOMS\Log\FileLogger; + +/** + * Default exception and error handler. + * + * @category Web + * @package Web + * @since 1.0.0 + */ +final class UnhandledHandler +{ + + /** + * Exception handler. + * + * @param mixed $e Exception + * + * @return void + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public static function exceptionHandler($e) + { + $logger = FileLogger::getInstance(ROOT_PATH . '/Logs'); + $logger->critical(FileLogger::MSG_FULL, [ + 'message' => $e->getMessage(), + 'line' => $e->getLine(), + 'file' => $e->getFile(), + ]); + + echo 'My Exception [' . $e->getCode() . '] ' . $e->getMessage() . '
' + . ' Exception on line ' . $e->getLine() . ' in file ' . $e->getFile() + . ', PHP ' . PHP_VERSION . ' (' . PHP_OS . ')
' + . 'aborting...
'; + } + + /** + * Error handler. + * + * @param int $errno Error number + * @param string $errstr Error message + * @param string $errfile Error file + * @param int $errline Error line + * + * @return bool + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public static function errorHandler(int $errno, string $errstr, string $errfile, int $errline) : bool + { + if (!(error_reporting() & $errno)) { + // This error code is not included in error_reporting + return false; + } + + $logger = FileLogger::getInstance(ROOT_PATH . '/Logs'); + $logger->error(FileLogger::MSG_FULL, [ + 'message' => 'Unhandled error', + 'line' => $errline, + 'file' => $errfile, + ]); + + switch ($errno) { + case E_USER_ERROR: + echo 'My ERROR [' . $errno . '] ' . $errstr . '
'; + break; + case E_USER_WARNING: + echo 'My WARNING [' . $errno . '] ' . $errstr . '
'; + break; + case E_USER_NOTICE: + echo 'My NOTICE [' . $errno . '] ' . $errstr . '
'; + break; + default: + echo 'Unknown error type: [' . $errno . '] ' . $errstr . '
'; + break; + } + + echo 'My Error Fatal error on line ' . $errline . ' in file ' . $errfile + . ', PHP ' . PHP_VERSION . ' (' . PHP_OS . '
' + . 'aborting...
'; + + error_clear_last(); + + return true; + } + + /** + * Shutdown handler. + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public static function shutdownHandler() + { + $e = error_get_last(); + + if (isset($e)) { + $logger = FileLogger::getInstance(ROOT_PATH . '/Logs'); + $logger->warning(FileLogger::MSG_FULL, [ + 'message' => $e['message'], + 'line' => $e['line'], + 'file' => $e['file'], + ]); + + echo 'My Error unhandled [' . $e['type'] . '] ' . $e['message'] . '
' + . ' Fatal error on line ' . $e['line'] . ' in file ' . $e['file'] + . ', PHP ' . PHP_VERSION . ' (' . PHP_OS . ')
' + . 'aborting...
'; + } + } +}