Anzeige
Tutorialbeschreibung

PHP - ErrorHandling - Was soll das PHP Script bei Fehlern tun?

PHP - ErrorHandling - Was soll das PHP Script bei Fehlern tun?

Hier wird erklärt wie du mit set_error_handler() deine eigenen Fehlermeldungen ausgeben kannst, sie dir per Mail zuschicken lassen kannst oder sie in eine Datenbank schreiben kannst


Schritt 1:
Erstelle eine neue PHP-Datei.

Schritt 2:
Nun möchte ich euch zeigen wie man mit PHP Fehlern umgeht. Um PHP-Fehler zu behandeln brauchen wir folgende Funktion:
 


Code:
/**
 * General errorhandler
 *
 * @param int $error_no
 * @param string $error_message
 * @param string $error_file
 * @param int $error_line
 * @param array $debug_information
 */
function my_error_handler($error_no$error_message$error_file$error_line$debug_information) {
    
// hier wird die Endausgabe gespeichert:
    
$error "<b><u>PHP-";
    
    
// $error_no legt fest, um was fuer einen Fehler es sich handelt:    
    
switch ($error_no) {
        case 
E_ERROR:
            
// FATALer Fehler
            
$error .= "FATALER FEHLER: ";
            break;
        case 
E_WARNING:
            
// Warning
            
$error .= "WARNUNG: ";
            break;
        case 
E_NOTICE:
            
// Notice
            
$error .= "HINWEIS: ";
            break;
        default:
            
// Sonstige
            
$error .= "UNBEKANNTER FEHLER: ";
            break;
    }
    
$error .= "</u></b><br /> ";
    
    
// $error_message beinhaltet die Fehlermeldung
    
$error .= $error_message."<br /> ";
    
    
// $error_file beinhaltet die Datei in der der Fehler aufgetreten ist und $error_line die Zeile
    
$error .= "<b>DATEI:</b> ".$error_file."<br />  <b>ZEILE:</b> ".$error_line."<br /> ";
    
    
// $debug_information
    /*
     * $debug_information werde ich nicht in meine Fehlermeldung mit einbringen, da es ein grosser Array ist,
     * der sämtliche Konfigurationen und Inputs des Servers beinhaltet, beispielsweise alle "_GET" Inputs.
     * Wer sich darüber informieren möchte ruft schreibt folgendes:
     * 
     * $error .= "<pre>".print_r($debug_information, true)."</pre>";
     */
    
    // Ausgabe des Fehlers
    
echo $error;
    
    
// Email schicken:
    
$mail_header "MIME-Version: 1.0 ";
    
$mail_header .= "Content-type: text/html; charset=iso-8859-1 ";
    
$mail_header .= "From: Mein Name <ich@mailadresse.de> "
    
$mail_content "<html><head><title>Error</title></head><body>".$error."</body></html>";
    
    
mail("empfaenger@mymailadresse.de""Fehler in einem PHP-Skript: ".$error_file$mail_content$mail_header);
    
    
// in Datenbank eintragen
    
$conn = @mysql_connect("localhost""ich""pwd") or die("FEHLER: DB nicht erreichbar");
    @
mysql_select_db("datenbank"$conn) or die("FEHLER: DB nicht gefunden!");
    @
mysql_query("INSERT INTO `errors` SET `error_msg` = '".$error_message."', `error_file` = '".$error_file."'"$conn);
    @
mysql_close($conn);
    
    
// script beenden
    
exit;
}


Ich hoffe meine Kommentare sind deutlich genug um das Prinzip zu erklären.

Schritt 3:
Nun habt ihr die Funktion, die die Fehler behandelt. Jetzt muss sie nur noch "aktiviert" werden, das ist jedoch relativ einfach:


Code:
// register
set_error_handler("my_error_handler");


Jetzt habt ihr die Fehlermeldung registriert und sie ist aktiv.

Schritt 4:
Nun packt man die Funktion und die Registrierung in eine Datei (bsp.: "errorhandling.inc.php") und dann kann man diese in alle Skripte via include() einbinden.


Kommentare
Achtung: Du kannst den Inhalt erst nach dem Login kommentieren.
Portrait von AustrianKiller
Alternative Portrait
-versteckt-(Autor hat Seite verlassen)
  • 05.04.2009 - 17:22

Sieht ganz okay aus, aber du musst es anders in die Datenbank eintragen! Du musst es escapen:
mysql_real_escape_string($error_file) Sonst zerstückelt er die Pfadangaben!

Portrait von kernel
  • 27.05.2008 - 11:31

Gut beschrieben! Super. Bedenke aber die umfassenden Möglichkeiten von Exceptions!

try {
throw new Exception('Testexception);
}
catch(Exception $e) {
echo $e;
}

x
×
×