Neuigkeiten:

still alive...

Hauptmenü

Error Handling Probleme mit Mail Inhalt

Begonnen von mod, 01. März 2005, 00:31:43

Vorheriges Thema - Nächstes Thema

mod

Hallo,
ich habe mit ein wenig Hilfe ein Script geschrieben welches Fehlermeldungen unterdrückt und in einem Log speichert.
Zusätzlich wird bei einem schwerwiegendem Fehler eine Mail verschickt.
Dies funktioniert auch schon soweit, doch möchte ich in der mail mehr Inhalt übergeben und da ist das Problem.
Ich habe es bislang noch nicht geschafft, den Code Schnipsel den er ins Log schreibt auch in der Mail wieder zugeben.
Wenn jemand hierzu eine idee oder einen Tipp hätte wäre ich echt dankbar!!
Achja meine zweite Frage wäre noch wie der Code aus sehen müsste um auf eine andere Seite zu verweisen und beim Aufruf der function user_meldung diese automatisch zu öffnen und nicht wie bislang diese zu includen.!


\"Error\",2=>\"Warning\",8=>\"Notice\",
                  256=>\"User Error\",512=>\"User Warning\",
                  1024=>\"User Notice\");
  $beschr=\"[\".date(\"d.m.Y H:i:s\").\"] \\n\"; // Datum und Uhrzeit
  $beschr.=\"Fehler!\\n\\tTyp: $klartext[$typ]\\n\";
  $beschr.=\"\\tMeldung: $meldung\\n\\tZeile: $zeile\\n\\n\";
  // enthaelt alle Variablen/Arrays, die spaeter
  //_nicht_ ausgegeben werden sollen
  $exclude=array(\"HTTP_POST_VARS\",\"_POST\",\"_GET\",
  \"HTTP_COOKIE_VARS\",\"_COOKIE\",\"HTTP_SERVER_VARS\",
  \"_SERVER\",\"HTTP_ENV_VARS\",\"_ENV\",\"HTTP_POST_FILES\",
  \"HTTP_GET_VARS\",\"_FILES\",\"_REQUEST\");
  ini_set(\"track_errors\",1); //Tracking einschalten
  switch ($typ) // Welche Art Fehler liegt vor?
  {
     case  E_NOTICE: // Wenn Notice, dann Eintrag ins Logfile
     case  E_USER_NOTICE:
           $fp=fopen(\"notice.log\",\"a\");
           // Konnte Logfile geoeffnet werden?
           if (false===$fp)
           { //Logfile nicht geoeffnet => Mail schicken
              send_mail(\"[uRGENT / NOTICE] Logfile failed\",
                         $beschr,2);
           }
           else
           {
              fputs($fp,$beschr);
              fputs($fp,\"\\n\\n\");
           }
        break;
     case  E_WARNING:      // Warning und Error werden
     case  E_USER_WARNING: // zusammen behandelt, da Warnings
     case  E_USER_ERROR:   // meist ernst zu nehmen sind
           user_meldung(); //Meldung für Benutzer ausgeben
           $fp=fopen(\"error.log\",\"a\"); //Logfile oeffnen
           // Konnte Logfile geoeffnet werden?
           if (false===$fp)
           {  // Logfile nicht geoeffnet => Mail schicken
              $subj=\"[uRGENT / ERROR] Logfile failed\";
              send_mail($subj, $beschr,2);
           }
           else
           {
              // Fehlermeldung in Logfile
              fputs($fp,$beschr);
             //Liest komplette Datei in das Array ein
              $datei=file($datei);
              // Konnte Datei gelesen werden?
              if (false===$datei)
              {
                 fputs($fp,\"Konnte Quelle nicht einlesen\\n\");
                 fputs($fp,
                       \"Das System meldet: $php_errormsg\\n\");
              }
              else
              {            
                 //3 Zeilen vor / nach dem Fehler ausgeben  
                 $padding=3;
                 // Liegt der Fehler in der Datei?
                 if (count($datei)$zeile-$padding)
                     {
                        $anfang=0; // 0 ist die erste Zeile
                     }
                     else
                     {
                        //Ausgabe mitten aus dem Text
                        $anfang=$zeile-$padding;
                     }
                     // Ende der Ausgabe berechnen
                     $ende=$zeile+$padding;                                                
                     for ($zaehler=$anfang; $zaehler  $ende)
                          {  // Dann Schleife verlassen
                             break;
                          }
                          //Zeilenumbrueche entfernen
                           $datei[$zaehler]=ereg_replace(\"[\\n\\r]\",\"\",$datei[$zaehler]);
                         //Quelltext-Zeile ausgeben
                         fputs($fp,\"$zaehler: $datei[$zaehler]\\n\");
                       }
                       fputs($fp,\"\\nVariableninhalte:\\n\");
                       // Alle Variablen abarbeiten
                       foreach ($exclude as $key)  
                       {
                          // Variable loeschen
                          unset ($kontext[$key]);
                       }
                       ob_start();
                       print_r($kontext);
                       $kontext_inhalte=ob_get_contents();
                       ob_end_clean();
                       fputs($fp,$kontext_inhalte);
        fputs($fp,\"\\n\\n\");
                    }
                    // Mail mit hoher Prio schicken
                    $inhalt=\"$beschr\\n\";
                    $inhalt.=\"\\n\";
                    $inhalt.=\"Variableninhalte:\\n $kontext_inhalte\\n\"; // hier wird die mail verfasst aber der inhalt ist halt noch nicht komplett
     send_mail(\"[ERROR] test.net\",$inhalt,2);
                 }
              }
              die();
  }  // ende switch
}
ini_set(\"error_reporting\",E_ALL); // alle Meldungen ein
ini_set(\"display_errors\",0); //Unterdrueckt die Ausgabe
ini_set(\"log_errors\",1); //Schaltet das Logging ein
ini_set(\"error_log\",\"./errlog/error.log\");//Pfad setzen
set_error_handler(\"eh\"); // Error-Handler definieren
?>

 
 - Editiert von MoD am 01.03.2005, 01:05 -

Danke,




MfG




MoD


all your base are belong to us / Discord