Sebastian Jurk: Fehlermeldung in Datei umleiten

Hallo,

gibt es aus php heraus die Möglichkeit sämtliche Fehlermeldungen in eine Datei umzuleiten?

Ich rufe mit einer Software ein php-script auf und falls Fehlermeldungen auftreten bekomme ich das nicht mit. Ich habe schon alles mögliche probiert aber nicht die richtigen Befehle gefunden. Und so ist Fehlersuche sehr schwer.

Gibts da einfache Befehle direkt in php?

Grüße!
Sebastian

  1. Hello,

    gibt es aus php heraus die Möglichkeit sämtliche Fehlermeldungen in eine Datei umzuleiten?

    Auf welchem Betriebssystem läuft Dein PHP?

    Ich rufe mit einer Software ein php-script auf und falls Fehlermeldungen auftreten bekomme ich das nicht mit. Ich habe schon alles mögliche probiert aber nicht die richtigen Befehle gefunden. Und so ist Fehlersuche sehr schwer.

    Lies dir das Kapitel über die Fehlerbehandlung durch:
    http://de3.php.net/manual/en/book.errorfunc.php

    Wenn dein PHP auf einem Linuxsystem läuft, kannst Du einfach in einem zweiten Fenster die Fehlermeldungen ansehen.

    z.B. mit einem:

    tail -fn50 error_log

    auf das Apache Error-Log kannst Du dann zuschauen, wie PHP die Fehlermeldungen wegschreibt, wenn display_errors auf off steht.

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Im Moment läuft es erstmal nur auf einem lokalen Webserver...

      Gibt es irgendeinen Befehl direkt in einem php-Skript? zB mit fwrite in eine Datei? Ich habe es schon mit einer eigenen Fehlerroutine probiert aber mir scheint das ist eher für andere Dinge gedacht als die php-Fehler.

      1. Hello,

        Im Moment läuft es erstmal nur auf einem lokalen Webserver...

        Und der läuft auf einem Linux?

        Gibt es irgendeinen Befehl direkt in einem php-Skript? zB mit fwrite in eine Datei? Ich habe es schon mit einer eigenen Fehlerroutine probiert aber mir scheint das ist eher für andere Dinge gedacht als die php-Fehler.

        Wenn Du jeden Fehler selber anfassen willst, dann kannst Du ihn mit
        http://de3.php.net/manual/en/function.error-log.php
        wegschreiben lassen. Selbstverständlich kannst Du diesen letzten Komfort auch noch aufgeben und
        http://de3.php.net/manual/en/function.file-put-contents.php
        dafür benutzen.

        Dann lässt sich aber bald gar nichts mehr generalisieren, also generelle Umleitungen einstellen für die Fehlerausgabe.

        Du kannst aber auch auf einer WinDOSe die Fehlermeldungen ins Error-Log des Webservers schreiben lassen. Siehe hierzu die Bemerkungen zu
        http://de3.php.net/manual/en/errorfunc.configuration.php#ini.display-errors
        und
        http://de3.php.net/manual/en/errorfunc.configuration.php#ini.log-errors

        Ich kenne jetzt aus dem Handgelenk nur kein Programm für WinDOS, dass dem 'tail -f' von Linux entsprechen würde.

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
        1. Hello,

          Ich kenne jetzt aus dem Handgelenk nur kein Programm für WinDOS, dass dem 'tail -f' von Linux entsprechen würde.

          Aber dafür gibt es ja zum Glück die allwissende Müllhalde
          http://www.admins-blog.de/admins-help/tail-f-ersatz-unter-windows

          Werde ich mir selber auch gleich mal ansehen...

          Liebe Grüße aus dem schönen Oberharz

          Tom vom Berg

          --
           ☻_
          /▌
          / \ Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de
          1. Hello,

            Ich kenne jetzt aus dem Handgelenk nur kein Programm für WinDOS, dass dem 'tail -f' von Linux entsprechen würde.

            Aber dafür gibt es ja zum Glück die allwissende Müllhalde
            http://www.admins-blog.de/admins-help/tail-f-ersatz-unter-windows

            Werde ich mir selber auch gleich mal ansehen...

            Jow, machdat. Funtkioneirt einwadnfrei, danke für den Link!!!!!

            Hotti -f

          2. Hallo,

            Ich kenne jetzt aus dem Handgelenk nur kein Programm für WinDOS, dass dem 'tail -f' von Linux entsprechen würde.

            Aber dafür gibt es ja zum Glück die allwissende Müllhalde
            http://www.admins-blog.de/admins-help/tail-f-ersatz-unter-windows

            Die kennt vor allem bessere Lösungen:

            a) Was spricht gegen cygwin und tail?
            b) Was spricht gegen Microsofts Tail.exe?

            Freundliche Grüße

            Vinzenz

            1. Hello,

              a) Was spricht gegen cygwin und tail?
              b) Was spricht gegen Microsofts Tail.exe?

              Vermutlich nichts.
              Besser geht meistens. Die Kunst, etwas zu tun, liegt darin, einen Anfang zu machen.

              Danke für den Hinweis.
              Kann man die rktools.exe bedenkenlos auch auf einem WinXP auspacken und benutzen?

              Liebe Grüße aus dem schönen Oberharz

              Tom vom Berg

              --
               ☻_
              /▌
              / \ Nur selber lernen macht schlau
              http://bergpost.annerschbarrich.de
              1. Hallo,

                b) Was spricht gegen Microsofts Tail.exe?

                Kann man die rktools.exe bedenkenlos auch auf einem WinXP auspacken und benutzen?

                ja.

                Freundliche Grüße

                Vinzenz

                1. Hello Vinzenz,

                  b) Was spricht gegen Microsofts Tail.exe?

                  Kann man die rktools.exe bedenkenlos auch auf einem WinXP auspacken und benutzen?

                  ja.

                  Das ist ja erst fünf Jahre und drei Tage her. Das ist noch nicht in meinem tiefsten Innern angekommen, wenn ich es denn damals überhaupt gelesen habe ;-P

                  Liebe Grüße aus dem schönen Oberharz

                  Tom vom Berg

                  --
                   ☻_
                  /▌
                  / \ Nur selber lernen macht schlau
                  http://bergpost.annerschbarrich.de
        2. Und der läuft auf einem Linux?

          Hatte ich vergessen zu erwähnen, das läuft auf Windows...

          Wenn Du jeden Fehler selber anfassen willst, dann kannst Du ihn mit
          http://de3.php.net/manual/en/function.error-log.php

          Das hab ich mir schon angesehen aber mir scheint der Befehl nützt weniger um php-Meldungen abzufangen als neue Fehlermeldungen zu erzeugen. So kommt es mir zumindest vor...

          http://de3.php.net/manual/en/errorfunc.configuration.php#ini.display-errors
          und
          http://de3.php.net/manual/en/errorfunc.configuration.php#ini.log-errors

          Dann geht es wohl doch nicht direkt im php-Skript.. schade..

          Grüße!
          Sebastian

          1. Hi,

            http://de3.php.net/manual/en/errorfunc.configuration.php#ini.display-errors
            und
            http://de3.php.net/manual/en/errorfunc.configuration.php#ini.log-errors

            Dann geht es wohl doch nicht direkt im php-Skript.. schade..

            Doch, so gut wie alle der auf dieser Seite genannten Optionen sind PHP_INI_ALL änderbar - und was das bedeutet, darüber kannst du dich oben auf der Seite auch informieren(!).

            MfG ChrisB

            --
            RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
            1. Aber das bedeutet dass man das in der ini setzen muss oder? Das ist ja dann nicht direkt im php-Skript... Und Sachen in inis setzen ist oft genug ein Problem wenn man etwas bei einem Hoster liegen hat. Deshalb setze ich lieber auf Lösungen die direkt per php machbar sind...
              Oder geht das doch direkt?

              1. Hi,

                Aber das bedeutet dass man das in der ini setzen muss oder?

                Nein.

                Oder geht das doch direkt?

                Ja.
                Jetzt informiere dich doch bitte endlich mal selber, anstatt ständig zu fragen. Was ist denn daran so schwer?

                MfG ChrisB

                --
                RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
          2. Hello,

            http://de3.php.net/manual/en/errorfunc.configuration.php#ini.display-errors
            und
            http://de3.php.net/manual/en/errorfunc.configuration.php#ini.log-errors

            Dann geht es wohl doch nicht direkt im php-Skript.. schade..

            Was geht nicht direkt im PHP-Script?
            Wozu habe ich Dir wohl die ganzen Links geschickt? Du musst ihne doch nur noch folgen und vielleicht auch mal in die übergeordnete Kategorie des Manuals schauen...
            http://de3.php.net/manual/en/errorfunc.configuration.php

            error_log hat den Change-Type PHP_INI_ALL
            Ok, jetzt müsstest Du wieder wissen, was das denn bedeutet?

            Du solltest wirklich lesen!

            Ich hätte aber noch ein paar Rollen Toilettenpapier und Latexhandschuhe hier. Zur Not komme ich dann Po-Abwischen...

            Liebe Grüße aus dem schönen Oberharz

            Tom vom Berg

            --
             ☻_
            /▌
            / \ Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de
            1. Verschon mich bitte in Zukunft mit solchen perversen Phantasien.. :)

              link

              Da steht dass php_ini_all bedeutet dass diese Settings dadurch geändert werden können dass sie in der php.ini gesetzt werden. Oder hab ich da was übersehen?

              1. Hello,

                Verschon mich bitte in Zukunft mit solchen perversen Phantasien.. :)

                link

                Da steht dass php_ini_all bedeutet dass diese Settings dadurch geändert werden können dass sie in der php.ini gesetzt werden. Oder hab ich da was übersehen?

                siehe http://de3.php.net/manual/en/configuration.changes.modes.php

                Wenn Du bei http://de3.php.net/manual/en/book.errorfunc.php angefangen hättest mit dem Lesen, so wie ich es in https://forum.selfhtml.org/?t=200809&m=1353642 empfohlen hatte, dann wärest Du schon fertig mit Deiner Problemlösung.

                Liebe Grüße aus dem schönen Oberharz

                Tom vom Berg

                --
                 ☻_
                /▌
                / \ Nur selber lernen macht schlau
                http://bergpost.annerschbarrich.de
                1. Also ich glaube ich habe jetzt die nötigen Codezeilen. Allerdings scheint das immer noch nicht ganz zu klappen..

                  ini_set('error_reporting', E_ALL);  
                  ini_set('display_errors', 1);  
                  ini_set('log_errors', 1);  
                  ini_set('error_log', '/htdocs/fehler.log');  
                  test();
                  

                  Das habe ich jetzt am Anfang des Skriptes stehen. Sollte eigentlich dafür sorgen dass Fehler in der Logdatei und am Bildschirm erscheinen soweit ich das verstanden habe. Am Bildschirm erscheint es auch aber nicht in der Datei. Hab die Datei auch schon mal erzeugt um zu sehen ob das dann klappt aber ohne Effekt.. Auch nur den Dateinamen genommen falls die Funktion doch woanders den Root sieht.

                  Jedenfalls wird das so irgendwie die Lösung sein. Muss nur noch den Fehler finden schätze ich..

                  1. Ich habs jetzt. Scheinbar nimmt der den Webseitenroot als Root und nicht den Serverroot. Unterschiedlich zur php.ini scheinbar. Und beim Testen als ich ohne Pfad und nur mit Dateiname getestet hatte hatte ich wohl die Settings falsch.

                    Jetzt gehts..

                    Danke fürs helfen..
                    Sebastian

                    1. Hello,

                      Ich habs jetzt. Scheinbar nimmt der den Webseitenroot als Root und nicht den Serverroot.

                      Eigentlich ist das nicht so geplant. Da wüsste ich jetzt gerne etwas mehr über Deine Umgebung:

                      Betriebssystem und Version:
                      Webserver und Version:
                      PHP Version:
                      Betriebsart von PHP (Modul, CGI, Fast-CGI, ...):
                      Benutzer, unter dem der Webserver läuft:
                      Account-Owner der Domain (auch auf dem local Host):

                      Unterschiedlich zur php.ini scheinbar. Und beim Testen als ich ohne Pfad und nur mit Dateiname getestet hatte hatte ich wohl die Settings falsch.

                      Jetzt gehts..

                      Danke fürs helfen..

                      Bitte.
                      Die nächste Geburt sollte dann ja schon etwas leichter sein, oder?

                      Liebe Grüße aus dem schönen Oberharz

                      Tom vom Berg

                      --
                       ☻_
                      /▌
                      / \ Nur selber lernen macht schlau
                      http://bergpost.annerschbarrich.de
                      1. Ich habs jetzt als ini_set('error_log', 'fehler.log'); laufen und die Datei wird direkt in htdocs erstellt. Also dem Root der virtuellen Webseite.

                        Betriebssystem und Version:

                        Vista 32bit neuestes SP

                        Webserver und Version:

                        XAMMP mit Control Panel von 2009-07-28

                        PHP Version:

                        5.3.1

                        Betriebsart von PHP (Modul, CGI, Fast-CGI, ...):

                        ? Jedenfalls die normale XAMMP-Konfi

                        Benutzer, unter dem der Webserver läuft:

                        Im Taskmanager sind alle relevanten Prozesse vom Benutzer Sebastian was mein normaler User ist.

                        Account-Owner der Domain (auch auf dem local Host):

                        ?

                        1. Hi!

                          Ich habs jetzt als ini_set('error_log', 'fehler.log'); laufen und die Datei wird direkt in htdocs erstellt. Also dem Root der virtuellen Webseite.

                          Damit wird die Datei also im aktuellen Verzeichnis erstellt. Das muss deswegen für den Webprozess beschreibbar sein. Zudem kann die fehler.log über das Web gelesen werden (wenn es nicht anderweitig verhindert wird). Hast du dir beide Punkte gut überlegt? Ich würde ja ein Verzeichnis außerhalb des DocumentRoot nehmen, welches extra für das Logging vorgesehen ist und auch vom Webserver/PHP beschrieben werden kann, während die Verzeichnisse im DocumentRoot nur lesbar sind. Das setzt natürlich voraus, dass der Webserver unter einem eigenen Benutzer läuft.

                          Betriebsart von PHP (Modul, CGI, Fast-CGI, ...):
                          ? Jedenfalls die normale XAMMP-Konfi

                          Steht in der phpinfo()-Ausgabe.

                          Lo!

                          1. Damit wird die Datei also im aktuellen Verzeichnis erstellt. Das muss deswegen für den Webprozess beschreibbar sein. Zudem kann die fehler.log über das Web gelesen werden (wenn es nicht anderweitig verhindert wird). Hast du dir beide Punkte gut überlegt? Ich würde ja ein Verzeichnis außerhalb des DocumentRoot nehmen, welches extra für das Logging vorgesehen ist und auch vom Webserver/PHP beschrieben werden kann, während die Verzeichnisse im DocumentRoot nur lesbar sind. Das setzt natürlich voraus, dass der Webserver unter einem eigenen Benutzer läuft

                            Normalerweise nehme ich für soetwas auch ein Verzeichnis eine Ebene höher. Manchmal geht das ja auf dem Webspace mit ../datei. Wenn das nicht geht hänge ich vorn .ht an den Dateinamen. Dann sollte das nicht so einfach aus dem Netz erreichbar sein.

                            Betriebsart von PHP (Modul, CGI, Fast-CGI, ...):
                            ? Jedenfalls die normale XAMMP-Konfi

                            Steht in der phpinfo()-Ausgabe.

                            Da hatte ich auch gesucht aber nicht den Eintrag gefunden...

                    2. Hi!

                      Ich habs jetzt. Scheinbar nimmt der den Webseitenroot als Root und nicht den Serverroot. Unterschiedlich zur php.ini scheinbar.

                      Stimmt, beide Vermutungen stimmen nur scheinbar. PHP interessiert sich jedoch überhaupt nicht für irgendwelche Root-Konfigurationen des Apachen. Diese Information bekommt es auch nicht in allen Webserver-Einbindevarianten mitgeteilt. Alle Pfadangaben gehen von den Gegebenheiten des Dateisystems aus. Pfade, die mit \ oder / anfangen sind dessen Wurzelverzeichnis (in Windows das des aktuellen Laufwerks - siehe getcwd()).

                      Zu beachten ist außerdem, dass mit einer Im-Script-Konfiguration nur die Fehler berücksichtigt werden können, die zur Laufzeit zeitlich nach der Abarbeitung dieser Funktionen berücksichtigt werden können. Parser-Fehler und andere, die vor dem Scriptstart auftreten, sind weiterhin von der php.ini bis maximal Per-Verzeichnis-Konfiguration (.htaccess/.user.ini) abhängig.

                      Lo!

            2. Ok, heißt wohl dass es in php und ini gesetzt werden kann.. Dann such ich mal wie das geht..
              Das ist genug Text!