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