Heinz: PHP- und DB-Error-Logging

Guten Tag,

ich möchte sowohl PHP-, als auch Datenbank(MySQL)-Fehler loggen.
Dafür habe ich zwei Funktionen erstellt.

Diejenige, die PHP-Fehler loggen soll, wird so angesprochen:
error_reporting(E_ALL ^ E_NOTICE);
set_error_handler("php_error_handler");

Die Funktion php_error_handler() funktioniert auch wunderbar, bis auf die Tatsache, dass sie auch die E_NOTICE-Fehler loggt. Wenn ich allerdings die Zeile
set_error_handler("php_error_handler");
streiche, also die Fehler direkt ausgeben lasse, dann erscheinen die E_NOTICE-Fehler nicht. Was mache ich falsch?

Diejenige, die DB-Fehler loggen soll, wird so angesprochen:
db_error_handler(mysql_errno($db_verb_handle), mysql_error($db_verb_handle));
Das funktioniert leider nicht, mein Apache-Webserver stürzt dann immer ab. Was mache ich hier falsch?

Danke für eure Hilfe!

Heinz

  1. hi,

    Die Funktion php_error_handler() funktioniert auch wunderbar, bis auf die Tatsache, dass sie auch die E_NOTICE-Fehler loggt.
    [...] Was mache ich hier falsch?

    Du liest das Manual nicht gründlich.

    Zitat Manual bzgl. set_error_handler():
    "Die Einstellungen der Funktion error_reporting() haben keine Auswirkung und Ihre eigene Fehlerbehandlungsroutine wird ohne Rücksicht darauf aufgerufen."

    Wenn du drain bestimmte Fehlertypen nicht loggen willst, musst du das in deiner eigenen Fehlerbehandlungsfunktion entscheiden.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hallo,

      Zitat Manual bzgl. set_error_handler():
      "Die Einstellungen der Funktion error_reporting() haben keine Auswirkung und Ihre eigene Fehlerbehandlungsroutine wird ohne Rücksicht darauf aufgerufen."

      Wenn du drain bestimmte Fehlertypen nicht loggen willst, musst du das in deiner eigenen Fehlerbehandlungsfunktion entscheiden.

      Kannst du mir vielleicht einen Tipp geben, wie ich diese bestimmten Fehlertypen finde? Ich sehe, dass in der Variablen $errno verschiedene Nummern auftauchen. Haben alle Fehler vom Typ E_NOTICE eine bestimmte Nummer? Welche Nummern stehen für welche Fehlertypen?

      Danke für deine Hilfe!

      Heinz

      1. Heinzilein :-)!
        Warum baust du Deine Skripte nicht einfach so um, dass keine Notice kommen?
        Das wäre doch die einfachste und sicherste Lösung.

        TomIRL

      2. hi,

        Kannst du mir vielleicht einen Tipp geben, wie ich diese bestimmten Fehlertypen finde?

        Wie wär's, wenn du wenigstens _jetzt_ mal anfangen würdest, das Manual zu lesen, nachdem du nochmal darauf hingewiesen wurdest?

        Da gibt's _Beispiele_.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Guten Abend,

          Wie wär's, wenn du wenigstens _jetzt_ mal anfangen würdest, das Manual zu lesen, nachdem du nochmal darauf hingewiesen wurdest?

          Da gibt's _Beispiele_.

          Danke, habe ich gemacht. Ich weiß nun, wie ich diese Fehler abfange.

          Allerdings habe ich noch immer ein Problem mit dem Loggen von DB-Fehlern. Wenn einer von diesen auftritt, wird folgender Code ausgeführt:
          set_error_handler("php_error_handler");
          trigger_error(mysql_error($db_verb_handle), E_USER_NOTICE);
          Der Apache stürzt leider jedesmal ab.

          Weiß jemand Rat?

          Heinz

          1. echo $begrüßung;

            trigger_error(mysql_error($db_verb_handle), E_USER_NOTICE);
            Der Apache stürzt leider jedesmal ab.
            Weiß jemand Rat?

            Versuche herauszufinden, ob das immer so ist oder ob das nur in bestimmten Situationen oder bei bestimmten Stringwerten, die du trigger_error() übergibst, auftritt und versuche die genaue Stelle zu ermitteln, wo der Absturz auftritt. Dazu verwende ich gern die(), welches ich jedes Mal weiter nach hinten versetze. Wenn der Absturz eher auftritt als der gezielte Tod, dann war die Anweisung vor dem die() die Ursache.

            echo "$verabschiedung $name";

            1. Danke dir für deine Hilfe!

              Ich habe es mit der die()-Methode probiert und bin letztendlich auf einen Befehl gestoßen, der wohl für den Fehler verantwortlich ist.
              Dieser Befehl ist ein Funktionsaufruf:
              funktion();
              Die aufgerufene Funktion "funktion" befindet sich in derselben PHP-Datei über der Funktion, in der der Funktionsaufruf steht.
              Wenn ich nun (ebenfalls über der Funktion, in der der Funktionsaufruf steht) eine andere Funktion "funktion2" einbaue, die denselben Inhalt  hat, und den Funktionsaufruf starte, dann erzeugt dies keinen Fehler.
              Ich kann mir das alles überhaupt nicht erklären.

              Hat jemand dafür vielleicht doch eine Erklärung?

              Danke

              Heinz

              PS: Die PHP-Datei (siehe Beschreibung oben) sieht übrigens so aus:
              <?php
              function funktion2() {
              ...
              }

              function funktion() {
              ...
              }

              function aufrufende_funktion() {
              funktion();
              }
              ?>

              Nur um möglichst viele Informationen zu geben (vielleicht ist es ja von Bedeutung): Die PHP-Datei selbst ist durch einen include-Befehl in einer anderen PHP-Datei eingebunden.