Hi, ich hab ien Problem mit meinem ErrorHandler.
Ich bekomme immer, egal ob ein Fehler auftriit und der Error Handler benutzt wird opder nicht, die Fehlermeldung:
Code:
Fatal error: Class declarations may not be nested in /home/www/kunden/matthes-enderlein-gymnasium.de/klassen/errorhandle.class.php on line 15
In Zeile 15 steht nur
Code:
class errorHandle {
Irgendwie weis ich nich weiter.
http://bugs.php.net/bug.php?id=35634 <- hier steht, irgendwie was von nem Bug der irgendwie keiner is sondern n Programmfehler. Ich hab aber keine Ahnung ob dies einer is. Ich hab auch schon paar mal getestet und da kam auch keine Fehler im Skript.
Bitte helft mir mal.
Hier ist der Code:
PHP-Code:
<?php
class errorHandle {
/**
* Fehler Level
* @var int
* @access private
*/
private $errorLevel;
/**
* Fehlermeldung
* @var string
* @access private
*/
private $errorMsg;
/**
* Datei in der der Fehler aufgetreten ist
* @var string
* @access private
*/
private $errorFile;
/**
* Zeile in der der Fehler aufgetreten ist
* @var int
* @access private
*/
private $errorLine;
/**
* Pfad der Logdatei
* @var string
* @access private
*/
private $logFile = 'test.txt';
/**
* Gibt an ob einen E-Mail versendet werden soll oder nicht
* @var boolean
* @access private
*/
private $email = false;
/**
* E-Mail Adresse an die der Fehler Report geschickt wird
* @var string
* @access private
*/
private $emailAddress = 'egal@web.de';
/**
* Gibt an ob die Fehlermeldung ausgegeben wird oder nicht
* @var boolean
* @access private
*/
private $dispErrors = true;
/**
* Fehlermeldung wenn ein Fehler beim ausfuehren dieser Klasse auftritt
* @var string
* @access private
*/
private $totalErrorMsg = 'Es ist ein Fehler bei der Fehlerbehandlung aufgetreten.';
/**
* Konstruktor
* @param int $errorLevel Fehler Level
* @param string $errorMsg Fehlermeldung
* @param string $errorFile Datei in der der Fehler aufgetreten ist
* @param int $errorLine Zeile in der der Fehler aufgetreten ist
* @param strig $logFile Pfad der Logdatei
* @param boolean $email Gibt an ob einen E-Mail versendet werden soll oder nicht
* @param string $emailAddress Optional, E-Mail Adresse an die die Mail versendet wird
* @param boolean $diplayErrors Optional, gibt an ob die konkreten Fehlermeldungen angezeigt werden sollen
* @return void
* @access public
*/
public function __construct($errorLevel, $errorMsg, $errorFile, $errorLine){
$this->errorLevel = $errorLevel;
$this->errorMsg = $errorMsg;
$this->errorFile = $errorFile;
$this->errorLine = $errorLine;
$this->checkLogFile();
if($email) $this->sendMail();
$this->displayError();
}
/**
* Prueft ob der Fehler schon gelogt ist
* @return boolean
* @access private
*/
private function checkLogFile() {
$content = $this->readLogFile();
$ex = explode('###END ERROR###', $content);
$size = count($ex)-1;
for($i = 0; $i < $size; $i++) {
$levelEx = explode('Level:', $ex[$i]);
$dateiEx = explode('Datei:', $levelEx[1]);
$zeilenEx = explode('Zeile:', $dateiEx[1]);
$datumEx = explode('Datum:', $zeilenEx[1]);
$msgEx = explode('Nachricht:', $datumEx[1]);
if(trim($msgEx[1]) == $this->errorMsg &&
trim($dateiEx[0]) == $this->errorLevel &&
trim($zeilenEx[0]) == $this->errorFile &&
trim($datumEx[0]) == $this->errorLine) {
return;
}
}
$this->logError();
}
/**
* Oeffnet die Logdatei
* @return resource
* @access private
*/
private function openLogFile() {
if(!is_readable($this->logFile)) {
echo $this->totalErrorMsg;
exit();
}
if(!$fp = fopen($this->logFile, 'ab+')) {
echo $this->totalErrorMsg;
exit();
}
return $fp;
}
/**
* Liest die Logdatei
* @access mixed: bei Erfolg string(Inhalt der Logdatei)
* bei Fehlschlag false
* @return string
*/
private function readLogFile() {
if(filesize($this->logFile) == 0)
$filesize = 1;
else
$filesize = filesize($this->logFile);
return fread($this->openLogFile(), $filesize);
}
/**
* Logt den Fehler
* @return boolean
* @access private
*/
private function logError() {
if(!$fp = $this->openLogFile()) {
return false;
}
$date = date('d.m.y; H:i');
$err = <<<MSG
###START ERROR###
Level: {$this->errorLevel}
Datei: {$this->errorFile}
Zeile: {$this->errorLine}
Datum: {$date}
Nachricht: {$this->errorMsg}
###END ERROR###
MSG;
if(fwrite($fp, $err)) {
return true;
} else {
echo $this->totalErrorMsg;
exit();
}
}
/**
* Versemdet die E-Mail
* @access private
* @return boolean
*/
private function sendMail() {
require_once'phpmailer.class.php';
$mailer = new PHPMailer();
$mailer->FromName = 'MEG-Bugreport';
$mailer->From = 'bug_report@meg.de';
$mailer->AddAddress($this->emailAddress);
$mailer->Subject = 'Es ist ein Fehler aufgetreten';
$date = date('d.m.y; H:i');
$mailer->Body = <<<MSG
###START ERROR###
Level: {$this->errorLevel}
Datei: {$this->errorFile}
Zeile: {$this->errorLine}
Datum: {$date}
Nachricht: {$this->errorMsg}
###END ERROR###
MSG;
if($mailer->send()) {
return true;
} else {
echo $this->totalErrorMsg;
exit();
}
}
/**
* Gibt die Felhlermeldung aus
* @return void
* @access private
*/
private function displayError() {
require_once'smarty/Smarty.class.php';
$smarty = new smarty();
$smarty->compile_dir = 'templates_c/standart';
$smarty->template_dir = 'templates/standart';
$msg = 'Es ist ein interner Fehler aufgetreten.';
if($this->dispErrors === true) {
$date = date('d.m.y; H:i');
$msg .= <<<MSG
[b]Fehler Report[/b]
Level: {$this->errorLevel}
Datei: {$this->errorFile}
Zeile: {$this->errorLine}
Datum: {$date}
Nachricht: {$this->errorMsg}
MSG;
}
if($this->errorLevel == '256' || $this->errorLevel == '512' ||
$this->errorLevel == 'E_USER_ERROR' || $this->errorLevel == 'E_USER_WARNING') {
ob_clean();
$smarty->assign('error_msg', $msg);
$smarty->assign('title', 'System-Fehler');
$smarty->display('system_error.tpl');
ob_end_flush();
exit();
} else {
$smarty->assign('error_msg', $msg);
$smarty->display('error.tpl');
}
}
}
?>