<?php
// Fehlerreporting einschalten aber Fehler unterdrücken.
if (ini_set('display_errors', false)) {
define("INI_DISPLAY_ERRORS_OFF", 'YES');
error_reporting(E_ALL);
}
// Fehlerbehandlungsfunktion
function newErrorHandler($fehlercode, $fehlertext, $fehlerdatei, $fehlerzeile) {
if((defined("INI_DISPLAY_ERRORS_OFF") && ($fehlercode & error_reporting())) || !defined("INI_DISPLAY_ERRORS_OFF")) {
// Hier werden nur Fehler behandelt die nicht mit einem @ gekennzeichnet wurden
// (oder display_error konnte nicht auf false gesetzt werden
$types = array(
1 => 'E_ERROR',
2 => 'E_WARNING',
4 => 'E_PARSE',
8 => 'E_NOTICE',
16 => 'E_CORE_ERROR',
32 => 'E_CORE_WARNING',
64 => 'E_COMPILE_ERROR',
128 => 'E_COMPILE_WARNING',
256 => 'E_USER_ERROR',
512 => 'E_USER_WARNING',
1024 => 'E_USER_NOTICE',
6143 => 'E_ALL',
2048 => 'E_STRICT',
4096 => 'E_RECOVERABLE_ERROR'
);
if (isset($types[$fehlercode])) {
$errorType = $types[$fehlercode];
}
else {
$errorType = 'unknown';
}
$writing_possible = true;
if (!error_log(trim($errorType.' ['.$fehlercode.']: '.$fehlertext.' in Line '.$fehlerzeile.' ('.$fehlerdatei.')'), 0)) {
$writing_possible = false;
}
// Daten außerdem in mySQL sichern
$sqltraced = false;
if (class_exists('SqlConnection') && in_array('sqlconn', array_keys($GLOBALS))) {
$sqlconn_l = $GLOBALS['sqlconn'];
if ($sqlconn_l instanceof SqlConnection) {
$sql_user_ip = $_SERVER['REMOTE_ADDR'];
$sql_msg = $sqlconn_l->escape_string($fehlertext);
$sql_file = $sqlconn_l->escape_string($fehlerdatei);
$sql_logged = ($writing_possible) ? 'Yes' : 'No';
$errorType = $sqlconn_l->escape_string($errorType);
if ($sqlconn_l->query("INSERT INTO errlog_php(ip, no, msg, file, line, type, logged) VALUES ('$sql_user_ip', $fehlercode, '$sql_msg', '$sql_file', $fehlerzeile, '$errorType', '$sql_logged');")) {
$sqltraced = true;
}
}
}
$adminshow = false;
if (class_exists('PageUser') && in_array('user', array_keys($GLOBALS))) {
$pageuser = $GLOBALS['user'];
if (($pageuser instanceof PageUser) && ($pageuser->get_user_level() == PAGEUSER_LEVEL_ADMINISTRATOR)) {
$adminshow = true;
}
}
if ($adminshow) {
echo '
<div class="php_error">'.$errorType.' ['.$fehlercode.']: <br />
<b>'.$fehlertext.'</b><br />
<br />
Line: '.$fehlerzeile.'<br />
File: '.$fehlerdatei.'<br />
<br />
';
if ($sqltraced) {
echo '<i>Fehler in Datenbank gesichert</i><br />';
}
else {
echo '<b>Konnte Fehler nicht sichern</b><br />';
}
if ($writing_possible) {
echo '<i>Fehler in Serverlog gesichert</i>';
}
else {
echo '<b>Konnte Serverlog nicht schreiben</b>';
}
echo '</div>';
}
}
//Damit die PHP-interne Fehlerbehandlung nicht ausgeführt wird
return true;
}
set_error_handler('newErrorHandler');
?>