handler = set_error_handler(function($errno, $errstr, $errfile, $errline){ self::myHandler($errno, $errstr, $errfile, $errline); }); error_reporting( E_ALL ); ini_set('display_errors', 1); } /** * Custom error handler * @param INT $errno error code * @param String $errstr the error message * @param String $errfile the file that triggered the error * @param INT $errline line of code where error was triggered * @return Boolean */ private static function myHandler($errno, $errstr, $errfile, $errline){ if (!(error_reporting() & $errno)) { return; } header('Status: 500 Internal Server Error'); header('HTTP/1.0 500 Internal Server Error'); switch ($errno) { case E_USER_ERROR: $err_mes = '
'; $err_mes .= ''; $err_mes .= "My ERROR [$errno] $errstr
". PHP_EOL; $err_mes .= " Fatal error on line $errline in file $errfile"; $err_mes .= ", PHP " . PHP_VERSION . " (" . PHP_OS . ")
". PHP_EOL; $err_mes .= "Aborting...
" . PHP_EOL; $err_mes .= '
'; self::addLog($err_mes); exit(1); break; case E_USER_WARNING: $err_mes = '
'; $err_mes = "My WARNING [$errno] $errstr
". PHP_EOL; $err_mes .= '
'; self::addLog($err_mes); break; case E_USER_NOTICE: $err_mes = '
'; $err_mes = "My NOTICE [$errno] $errstr
". PHP_EOL; $err_mes .= '
'; self::addLog($err_mes); break; default: $err_mes = '
'; $err_mes .= ''; $err_mes .= "My ERROR [$errno] $errstr
". PHP_EOL; $err_mes .= " Fatal error on line $errline in file $errfile"; $err_mes .= ", PHP " . PHP_VERSION . " (" . PHP_OS . ")
". PHP_EOL; $err_mes .= "Aborting...
" . PHP_EOL; $err_mes .= '
'; self::addLog($err_mes); exit(1); break; } return true; } /** * Subscribe fatal php errors */ private static function check_for_fatal(){ $error = error_get_last(); if ( $error["type"] == E_ERROR ) self::myHandler( $error["type"], $error["message"], $error["file"], $error["line"] ); } /** * Adds the error message to a log file using the date of trigger * @param String $err_mes the errror message to be added to the log */ public static function addLog($err_mes){ if(APPLICATION_MODE !== 'PROD'){ header('Content-Type: text/html; charset=utf-8'); echo $err_mes; }else{ $errorDate = date('Y/m/d H:i:s'); $today = getdate(); $logDir = PATH_LOGS.$today['year'].'/'.$today['month'].'/'.$today['mday'].'/'; if (!file_exists($logDir)) { mkdir($logDir, 0777, true); } $logFile = $logDir.$today['hours'].'_'.$today['minutes'].'.log'; $fileHandler = fopen($logFile, "a"); fwrite($fileHandler, $errorDate . PHP_EOL); fwrite($fileHandler, $err_mes . PHP_EOL . PHP_EOL); fclose($fileHandler); $friendlyErrorMessage = '
'; $friendlyErrorMessage .= ''; $friendlyErrorMessage .= ' There seems to be a problem with the page.'; $friendlyErrorMessage .= ' An error message has been sent to the support team.'; $friendlyErrorMessage .= ' In case the error persists please contact the support!'; $friendlyErrorMessage .= '
'; echo $friendlyErrorMessage; } } }