Ankündigung

Einklappen
Keine Ankündigung bisher.

function error handler

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • function error handler

    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:

    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>
    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:

    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>
    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:

    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);
    ?>
    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.

    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");
        }
    ?>
    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.

    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 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.

  • #2
    Der Fehler sagt dir, dass die Funktion schon vorhanden ist.
    Es kann sein das du diese Funktion zwei mal mit include aufrufst oder versuchst diese neu zu deklarieren. Die Zeilennummern sagen dir ja wo das Problem konkret entsteht.

    Um ein erneutes include zu verhindern gibt es include_once.

    Ausserdem ist dein HTML kaputt, th Elemente sind Überschriften der Tabellenspalten.
    Div Elemente innerhalb von Tabellenzellen sind auch überflüssig. Das zu deiner Aussage
    das ganze in ein schönes design zu packen.

    Kommentar


    • #3
      ich danke dir schonmal, habe ich tatsächlich doppelt includiert und nebenbei auch noch ein danke für den hinweiß zu dem html.
      jetzt habe ich nur noch das problem das fehler vorhanden sind, ich sie aber nicht in die Tabelle bekomme, da er scheinbar die variablen nur in der function beschreibt.
      Das könnte ich ja wiederrum mit dem 1.Ansatz lösen was wiederum unschön ist.
      Weiß jemand zufällig wie der Errorhandler die Variablen beschreibt ?

      Kommentar


      • #4
        Ein Error-Handler hat in der HTML-Ausgabe nichts verloren. Ein Error-Handler sollten auch keinen HTML-Code augeben.

        Kommentar

        Lädt...
        X