phpbar.de logo

Mailinglisten-Archive

[php] Eine vielleicht hilfreiche Error-Funktion...

[php] Eine vielleicht hilfreiche Error-Funktion...

Thomas Feyrer Dante_(at)_altmuehlnet.de
Fri, 13 Aug 1999 02:59:10 +0200


Hi Leute,
ich hab mir eine Error-Funktion gebastelt, die vielleicht einigen
(Anfängern) helfen dürfte...
Das ganze am besten in die errors.inc.php3 oder so reinhaun und per
include("errors.inc.php3") einbinden...
---snipp---
$errors = array(
    100 => array( "Couldn't connect to MySQL-Server!", true ),
    101 => array( "Database didn't exist!", true ),
    102 => array( "Error in SELECT statement!", true ),
    103 => array( "Error in INSERT statement!", true ),
    104 => array( "Error in UPDATE statement!", true ),
    105 => array( "Error in REPLACE statement!", true ),
    200 => array( "No parameters on search!", false ),
    300 => array( "URL was manipulated by the User (let it be)!", false)
);

function Error( $error_number, $mysql_query = "", $line = 0, $file = "" ) {
    global $errors;
    if( $errors[$error_number][1] || DEBUG ) {
        $msg = "Error-Number: $error_number\n";
        $msg .= "Error: ".$errors[$error_number][0]."\n";
        $msg .= "Skript: $PHP_SELF\n";
        $msg .= "Filename: $file\n";
        $msg .= "Line: $line\n";
        if( $error_number < 200 && error_number >= 100 ) {
            $msg .= "MySQL-Error-Number: ".mysql_errno()."\n";
            $msg .= "MySQL-Error: ".mysql_error()."\n";
            if( $mysql_query ) $msg .= "MySQL-Query: $mysql_query";
        }
        if( !DEBUG ) mail( "admin_(at)_domain.de", "Projektname: Error
$error_number", $msg );
    }
    $die_msg = "<html><head><title>Error: $error_number</title></head>
<body><font color='#800000' size=5>Error: $error_number</font><br>
<font size=4>".$errors[$error_number][0]."</font>
</body></html>";
    if( DEBUG ) $die_msg = $msg;
    die( $die_msg );
}
---snipp---
Nun zur erklärung:
Das Array $errors enthält alle Fehlermeldungen und weist ihnen eine ID zu,
der hintere Parameter ist dazu da, ob bei dem entsprechenden Fehler eine
Mail an den Admin geschickt werden soll (true) oder nicht (false).

Die Funktion Error kann entweder nur mit der Error-Number aufgerufen werden
oder auch mit den optionalen Argumenten $mysql_query, $line und $file. Da
man oft mehrere Dateien einbindet, verliert man leicht den Überblick wo
genau der Fehler aufgetreten ist, dafür sind die beiden letzen optionalen
Argumente $line und $file da. Man muss das aber nicht an den Stellen in
denen Error aufgerufen wird erst nachzählen oder ähnliches - nein - es geht
viel einfacher über die Konstaten __FILE__ und __LINE__ die das aktuell
ausgeführte Skript und die Zeile in der man sich gerade Befindet ausgeben.
Mit dem optionalen Argument $mysql_query kann man das Query, das - bei
einem mysql_query() ausgeführt wurde, mitübergeben, so dass man den Fehler
leichter lokalisieren kann.

$file wurde übrigens absichtlich als letzes Argument genommen, da man oft
selbst weiß in welchem file der Fehler aufgetreten ist, allerdings nicht
genau in welcher Zeile, so braucht man kein ", , " oder ähnliches im
Funktionsaufruf unterzubringen.

Nun ein paar Beispiele für die Aufrufe von Error():
mysql_connect( "localhost", "user", "pass" ) or Error( 100 );

$query = "SELECT * FROM table WHERE ";
for( $i=0,$n=count($foo); $i<$n; $i++ ) $query .= "bar='$foo[$i]' OR ";
$query .= "1=0";
mysql_query( $query ) or Error( 102, $query, __LINE__, __FILE__ );

if( !ereg( "[0-9]+", $id ) ) Error( 300, , __LINE__ );

Ich hoffe dieses Code-Schnippsel von oben kann einigen von euch helfen, mir
hilfts auf jedenfall einiges bei der Fehlersuche, vor allem wenn man
ungeklärte mysql-Abfrageprobleme hat...

Falls noch Fragen offen sind - fragt ;).

Ach ja, als kleiner Tipp (blöde neue Rechschreibung, will mein "Tip" und
"Delphin" wieder zurück *grummel*):
Versucht die Ausgabe solange wie möglich hinauszuzögern, also nicht
unbedingt gleich ein readfile("header.html") o.ä. davorzusetzen, dadurch
sehr ihr die Fehlermeldung klar-screen und sie ist notfalls (Tabellen)
nicht im Quelltext verwurschtelt.

Bye
 Dante



php::bar PHP Wiki   -   Listenarchive