Einen schönen Sonntag wünsche ich erstmal,
derzeit arbeite ich seit freitag an einem Projekt mit error handler.
Bisher hatte ich mehrere ansätze für die Lösung wozu ich gleich nocheinmal komme, aber irgendwo happerts.
Ich hatte mir gedacht, ein Errorhandler, sprich Warnings,Notice etc. ansatt dem standard fehlertext, das ganze in ein schönes design zu packen.
Das ganze ist mir sogar gelungen bis auf das dann die fehlerseite immer aufgerufen wird auch wenn kein fehler vorhanden ist und die Tabelle quasi keinen inhalt hat.
So kommen wir zu den ansätzen und wo es scheitert:
Ansatz1:
Das scheint zu funktionieren, bis auf das wenn kein fehler vorhanden ist das design logischerweiße immer vorhanden ist, zudem finde ich es persönlich nicht besonders schön html mit php zu vermischen.
die Lösung wäre einfach mit error_log eine datei zu erstellen und abzufragen ob diese vorhanden ist und zack wäre eine lösung vorhanden.
Deshalb bin ich von dieser variante ab und da ich grade mit einem template arbeite hatte ich dann eine neue idee.
Diese stückelt sich nun in mehrere dateien die ich einfach mal zeige.
Ansatz2:
dies wäre dann die html datei, schön getrennt von php, mit str_replace in einer anderen würde ich die platzhalter dann einfach ersetzen das sieht dann so aus:
Die php variablen kommen aus einer sprachdatei und sind somit hier eigentlich erstmal nicht relevant, funktionierte bis ich in einer weiteren datei folgendes einfüge und aufrufe, danach muss ich in den seitenquelltext schauen da das design geladen wird aber irgendwo am ende ein Fatal error herkommt, erstaunlicherweise werden die daten aus der sprachdatei nicht mehr geladen.
die datei erstellt er auch mit dem folgenden inhalt, mein problem an der stelle ist nun das ich eigentlich noch immer nich ganz verstanden habe als was das errorhandler die variablen erstellt, ein array ist es jedenfalls nicht und der Fatal Error bin ich auch etwas ratlos.
ich weiß das ihm was nicht passt von anfang bis ende der function aber ich finde den fehler einfach nicht.
ich hoffe man kann es verstehen was genau ich versuche und wo es happert, sonst stehe ich gerne für weitere fragen bereit.
Falls jemand eine Lösung hat oder vielleicht sogar noch eine bessere idee wie man es realisieren könnte wäre natürlich auch von vorteil.
Ich danke schonmal vorab für jede Hilfe und wünsche allen einen angenehmen Sonntag.
derzeit arbeite ich seit freitag an einem Projekt mit error handler.
Bisher hatte ich mehrere ansätze für die Lösung wozu ich gleich nocheinmal komme, aber irgendwo happerts.
Ich hatte mir gedacht, ein Errorhandler, sprich Warnings,Notice etc. ansatt dem standard fehlertext, das ganze in ein schönes design zu packen.
Das ganze ist mir sogar gelungen bis auf das dann die fehlerseite immer aufgerufen wird auch wenn kein fehler vorhanden ist und die Tabelle quasi keinen inhalt hat.
So kommen wir zu den ansätzen und wo es scheitert:
Ansatz1:
PHP-Code:
<link rel="stylesheet" href="-ehandlersheet-">
<div id="eheader">
<div id="eheaderlogo">
</div>
</div>
<div id="errorhandler-failcode">
<table cellspacing="0" cellpadding="1">
<tr>
<th colspan="5">
<div id="main">
<span class="error">( ! )</span>-ehandlermainfail-
</div>
</th>
</tr>
<tr>
<th colspan='5'>
<div id="Info">
-ehandlerinfo-
</div>
</th>
</tr>
<tr>
<th>
<div id="failn">
-ehandlerfailnumber-
</div>
</th>
<th>
-ehandlermessage-
</th>
<th>
-ehandlerdata-
</th>
<th>
-ehandlerline-
</th>
<th>
-ehandlercontext-
</th>
</tr>
<?php
error_reporting(E_ALL); // nur testweise da noch nicht alle fehler übernommen werden.
set_error_handler(cmserrors);
function cmserrors($code, $msg, $file, $line, $context) {
?>
<tr><td><div id="code"><?php print_r($code); ?></div></td><td><div id="msg"><?php print_r($msg); ?></div></td><td><div id="file"><?php print_r($file); ?></div></td><td><div id="line"><?php print_r($line); ?></div></td><td><div id="context"><?php print_r($context); ?></div></td></tr>
<?php
}
?>
</table>
</div>
<div id="efooter">
-copyright-
</div>
die Lösung wäre einfach mit error_log eine datei zu erstellen und abzufragen ob diese vorhanden ist und zack wäre eine lösung vorhanden.
Deshalb bin ich von dieser variante ab und da ich grade mit einem template arbeite hatte ich dann eine neue idee.
Diese stückelt sich nun in mehrere dateien die ich einfach mal zeige.
Ansatz2:
HTML-Code:
<link rel="stylesheet" href="-ehandlersheet-"> <div id="eheader"> <div id="eheaderlogo"> </div> </div> <div id="errorhandler-failcode"> <table cellspacing="0" cellpadding="1"> <tr> <th colspan="5"> <div id="main"> <span class="error">( ! )</span>-ehandlermainfail- </div> </th> </tr> <tr> <th colspan='5'> <div id="Info"> -ehandlerinfo- </div> </th> </tr> <tr> <th> <div id="failn"> -ehandlerfailnumber- </div> </th> <th> -ehandlermessage- </th> <th> -ehandlerdata- </th> <th> -ehandlerline- </th> <th> -ehandlercontext- </th> </tr> <tr> <td> <div id="code"> -ehandlerfailnumbertrue- </div> </td> <td> <div id="msg"> -ehandlermessagetrue- </div> </td> <td> <div id="file"> -ehandlerfiletrue- </div> </td> <td> <div id="line"> -ehandlerlinetrue- </div> </td> <td> <div id="context"> -ehandlercontexttrue- </div> </td> </tr> </table> </div> <div id="efooter"> -copyright- </div>
PHP-Code:
<?php
$ehandlersheet = "http://". $_SERVER['SERVER_NAME'] ."/". $config_home_folder ."stylesheets/main design/errorhandling.css";
//Template laden
$ehandler_template = file_get_contents("". $_SERVER['DOCUMENT_ROOT'] ."". $config_home_folder ."/templates/ehandler.tmp.html");
//Platzhalter ersetzen
$template_ehandler = array(
"-ehandlersheet-",
"-ehandlermainfail-",
"-ehandlerinfo-",
"-ehandlerfailnumber-",
"-ehandlermessage-",
"-ehandlerdata-",
"-ehandlerline-",
"-ehandlercontext-",
"-ehandlerfailnumbertrue-",
"-ehandlermessagetrue-",
"-ehandlerfiletrue-",
"-ehandlerlinetrue-",
"-ehandlercontexttrue-",
"-copyright-"
);
$ehandler = array(
"$ehandlersheet",
"$ehandlermainfail",
"$ehandlerinfo",
"$ehandlerfailnumber",
"$ehandlermessage",
"$ehandlerdata",
"$ehandlerline",
"$ehandlercontext",
"$code",
"$msg",
"$file",
"$line",
"$context",
"$copyright"
);
$ehandler_template = str_replace($template_ehandler, $ehandler, $ehandler_template);
print_r($ehandler_template);
?>
PHP-Code:
<?php
error_reporting(E_ALL); // nur testweise da noch nicht alle fehler übernommen werden.
set_error_handler(cmserrors);
function cmserrors($code, $msg, $file, $line, $context) {
$date = date('d.m.Y');
error_log("". $code ."<-->". $msg ."<-->". $file ."<-->". $line ."\n", 3, "". $_SERVER['DOCUMENT_ROOT'] ."/". $config_home_folder ."/log/error.log");
}
?>
Code:
<b>Fatal error</b>: Cannot redeclare cmserrors() (previously declared in /users/pyrosoftshare/www/functions/errorpage.php:4) in <b>/users/pyrosoftshare/www/functions/errorpage.php</b> on line <b>7</b><br />
ich hoffe man kann es verstehen was genau ich versuche und wo es happert, sonst stehe ich gerne für weitere fragen bereit.
Falls jemand eine Lösung hat oder vielleicht sogar noch eine bessere idee wie man es realisieren könnte wäre natürlich auch von vorteil.
Ich danke schonmal vorab für jede Hilfe und wünsche allen einen angenehmen Sonntag.
Kommentar