Tom: Umgang mit magischen Konstanten

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

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau
  1. 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

    --
    Ganz gleich, welchen Weg ich wähle, ich kehre heim.
    http://wwwtech.de/
    1. 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

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
      1. 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

        --
        Die Stärke des Geistes ist unendlich, die Muskelkraft dagegen ist begrenzt.
        http://wwwtech.de/
        1. 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

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
  2. 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

    --
    "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
    1. 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

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
      1. hi,

        Ich werde mich aber nichmal mit den Error Handlern selbst beschäftigen.

        ^^^^^^^

        eine etwas arrogante einstellung, wenn du mich fragst :-)

        scnr,
        wahsaga

        --
        "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
        1. 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

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
  3. 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

    --
    SELFHTML Tipps & Tricks: http://aktuell.de.selfhtml.org/tippstricks/