Umgang mit magischen Konstanten
Tom
- php
0 Christian Kruse0 Tom0 Christian Kruse0 Tom
0 wahsaga0 Andreas Korthaus
Hello,
$message = date('Y-m-d H:i:s').', IP='.$_SERVER['REMOTE_ADDR']."\n".
"$tablename in ".__FILE__.','.__FUNCTION__."\n".
"PHP: $php_errormsg\n".
'MySQL: '.mysql_errno($con).', '.mysql_error($con).
"\n".str_repeat('-',80)."\n";
error_log("DO_TOGGLE $id: $message", 3, REL.ERROR_LOG);
Wie kann man daraus am geschicktesten eine Funktion machen?
Die magischen Konstanten und $php_errormsg sowie mysql_error() beziehen sich ja immer auf die aktuelle Stelle, an der sie stehen...
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hallo Tom,
[...]
Wie kann man daraus am geschicktesten eine Funktion machen?
Übergebe die Kontext-abhaengigen Werte per Parameter. Eine andere Moeglichkeit bietet PHP
nicht.
Grüße,
CK
Hello,
Wie kann man daraus am geschicktesten eine Funktion machen?
Übergebe die Kontext-abhaengigen Werte per Parameter. Eine andere Moeglichkeit bietet PHP
nicht.
Dann kann ich auch überall dort, wo ich die Kontrolle haben will, diesen ganzen Block reinpasten...
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hallo Tom,
Wie kann man daraus am geschicktesten eine Funktion machen?
Übergebe die Kontext-abhaengigen Werte per Parameter. Eine andere Moeglichkeit bietet PHP
nicht.Dann kann ich auch überall dort, wo ich die Kontrolle haben will, diesen ganzen Block
reinpasten...
... und dann an 3472348329430487234987324982734 Stellen aendern, wenn du die Ausgabe
veraendern oder gar ganz abschalten willst.
Grüße,
CK
Hello,
Dann kann ich auch überall dort, wo ich die Kontrolle haben will, diesen ganzen Block
reinpasten...... und dann an 3472348329430487234987324982734 Stellen aendern, wenn du die Ausgabe
veraendern oder gar ganz abschalten willst.
Das Abschalten kann man noch durch ein "if(DEBUG)" vor dem error_log() steuern. Aber die globale Änderung ist tatsächlich ein Problem.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
hi,
Die magischen Konstanten und $php_errormsg sowie mysql_error() beziehen sich ja immer auf die aktuelle Stelle, an der sie stehen...
du könntest "eigene" konstanten benutzen, die du dir jeweils am anfang des aktuellen scriptes mit den richtigen werten belegst.
zitat manual:
Wie bei superglobals ist der Gültigkeitsbereich einer Konstanten global. Unabhängig vom Gültigkeitsbereich
können Sie in Ihrem Skript überall auf eine Konstante zugreifen.
wenn du also am anfang des haupt-scriptes
define('AKTUELLES_FILE', __FILE__);
machst, könntest du AKTUELLES_FILE in deiner error-funktion nutzen, und hättest immer den "richtigen" wert.
bei __FUNCTION__ funktioniert dies aber leider auch nicht so einfach - da wird dir wohl wirklich nur bleiben, den aktuellen wert als parameter zu übergeben ...
mysql_error() sollte m.E. kein problem darstellen - das liefert immer den letzten fehler der DB (oder '', wenn's keinen gab). es sei denn, du arbeitest mit mehreren verbindungskennungen in einem script, dann müsstest du die aktuelle auch noch jeweils übergeben.
btw:
Das Abschalten kann man noch durch ein "if(DEBUG)" vor dem error_log() steuern.
auch dafür würde ich eine konstante nehmen, und die global auf true oder false setzen - und die if-abfrage dann _innerhalb_ der error-funktion machen - spart dir die abfrage vor _jedem_ aufruf der funktion.
gruß,
wahsaga
Hello,
Das Abschalten kann man noch durch ein "if(DEBUG)" vor dem error_log() steuern.
auch dafür würde ich eine konstante nehmen, und die global auf true oder false setzen - und die if-abfrage dann _innerhalb_ der error-funktion machen - spart dir die abfrage vor _jedem_ aufruf der funktion.
Das habe ich mir auch überlegt, bin aber nun zu dem Schluss gekommen, dass ich erstmal um jedes Fehlerlogging ein
if(DEBUG and $fehler)
{
$message = # zusammenstellen der Message
error_log("AUFGABE: $message",PFAD_ZUR_LOGDATEI);
}
Da die Message ihren Wert auch aus Funktionen erhält, kann man sich die Kraft für die Zusammenstelllung sparen, wenn gar kein Logging stattfinden soll. Der Code soll ja nachher im Script drinbleiben und nur dann aktiviert werden, wenn die User wieder ungewöhnliche Reaktionen festgestellt haben.
Ich werde mich aber nichmal mit den Error Handlern selbst beschäftigen. Vielleicht sind die intelligenter für die Benutzung.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
hi,
Ich werde mich aber nichmal mit den Error Handlern selbst beschäftigen.
^^^^^^^
eine etwas arrogante einstellung, wenn du mich fragst :-)
scnr,
wahsaga
Hello,
hi,
Ich werde mich aber nichmal mit den Error Handlern selbst beschäftigen.
^^^^^^^eine etwas arrogante einstellung, wenn du mich fragst :-)
Ja, so gelesen schon. Sollte ja auch "nochmal" heißen...
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hi!
Die magischen Konstanten und $php_errormsg sowie mysql_error() beziehen sich ja immer auf die aktuelle Stelle, an der sie stehen...
Gewisse Informationen kannst Du Dir mit Hilfe von debug_backtrace() oder auch xdebug auch innerhalb der Funktion besorgen. An $php_errormsg - kommt man da nicht in der Funktion dran, evtl. über $GLOBALS? (auf jeden Fall lässt die Meldung sich ja separat loggen) Und mysql_error() sollte in jedem Fall auch in der Funktion funktionieren, da hierfür ja nur die aktuelle Verbindung zur DB maßgeblich ist.
Allerdings würde ich persönlich nicht das alles in einer Funktion/Logdatei vereinigen wollen.
Grüße
Andreas