Stefan: PHP7: keine Ausgabe von Syntaxfehlern

Hallo,

ich stelle gerade etwas auf PHP7 um und merke gleich zu Anfang, dass ich keinerlei Fehler mehr angezeigt bekomme.

Habe mich dann etwas eingelesen und gesehen, dass z.B. Fehler beim Aufbau einer Verbindung zur Datenbank mit catch / try abgefangen und angezeigt werden.

Was ich aber nicht hinbekomme, ist die Ausgabe von einfachen Syntax-Fehlern. Also Vertipper oder ein vergessenes Semikolon. Wenn ich ein catch / try um einen Codeblock mache, absichtlich einen Fehler in diesen einbaue, sehe ich keinerlei Fehlermeldung.

Kann mir jemand ein Stichwort geben, wo nach ich googlen sollte? Bzw. direkt sagen, was ich wo einstellen muss, damit Syntaxfehler ausgegeben werden?

Vielen Dank Stefan

  1. Hallo Stefan,

    Hast du nur auf PHP 7 umgestellt oder auch gleich den Anbieter?

    http://php.net/manual/de/function.error-reporting.php

    Gruss
    Henry

    1. Tach!

      http://php.net/manual/de/function.error-reporting.php

      Diese Funktion wirkt nicht bei Syntaxfehlern, weil sie erst zur Laufzeit wirken kann, das Script aber gar nicht losläuft, wenn Syntaxfehler drin sind.

      dedlfix.

    2. Nur auf PHP7.

      Ich habe jetzt gefunden, dass in der Datei 'php.ini' der Parameter display_errors auf OFF steht. Daran wird es wohl liegen.

      Nur kann ich das schlecht ändern, da ich keinen Zugriff auf diese Datei habe. Ein ini_set('display_errors', 'On'); im Sourcecode hat leider auch keine Abhilfe geschaffen.

      Na da muss ich mal den Admin fragen.

      Danke

      1. Hallo Stefan,

        Nur kann ich das schlecht ändern, da ich keinen Zugriff auf diese Datei habe. Ein ini_set('display_errors', 'On'); im Sourcecode hat leider auch keine Abhilfe geschaffen.

        Dedlfix meint zwar was anders, aber ich vermute(kann mich aber natürlich irren) was du willst reicht das:

        <?php
        error_reporting(E_ALL);
        ?>
        

        Füg das mal bitte oben in dein Script ein.

        Gruss
        Henry

        1. Tach!

          ini_set('display_errors', 'On'); error_reporting(E_ALL);

          Beides muss zusammen passen, aber beides geht nicht zur Laufzeit zu ändern, wenns gar nicht läuft.

          dedlfix.

          1. Hallo dedlfix,

            Beides muss zusammen passen, aber beides geht nicht zur Laufzeit zu ändern, wenns gar nicht läuft.

            Ich weiß natürlich was du meinst, aber ich glaube hier geht's lediglich um Notices, die er sehen möchte. Hoffe kommt noch Rückmeldung von ihm.

            Gruss
            Henry

            1. Tach!

              Ich weiß natürlich was du meinst, aber ich glaube hier geht's lediglich um Notices, die er sehen möchte. Hoffe kommt noch Rückmeldung von ihm.

              Syntaxfehler, wie das erwähnte vergessene Semikolon, sind fatale Fehler, die jammern nicht nur ganz leise in Form einer Notice. Beim ebenfalls erwähnten Vertipper kommt es darauf an, ob lediglich ein Variablenname oder was anderes betroffen ist.

              Jedenfalls ist es auch sinnvoll, dass man in seiner Entwicklungsumgebung die Ausgabemeldungen generell und nicht nur scriptweise angeschaltet hat, auf dem Server jedoch nur ins Logfile schreibt. Das erledigt man am besten über die Konfiguration anstatt es im Code vom Programm zu ändern, wenn man es vom Labor ins Produktive überführt. Und außerdem möchte man ja auch die Fehler vor Beginn der Laufzeit sehen oder im Log haben.

              dedlfix.

              1. Hallo dedlfix,

                ja, hattest recht, so ist das mit wohl der EHE. 😉

                Bleibt ihm wohl nichts anderes übrig als seinen Anbieter anzufragen, wenn er keinen Zugriff auf die .ini hat, bzw. auch nicht durch ini_set().? Oder hätte eine htaccess möglicherweise mehr Rechte?

                
                php_value display_errors on
                php_value error_reporting -1
                

                @stefan
                wer ist dein Anbieter, viell. findet sich was bei denen?

                Gruss
                Henry

                1. Tach!

                  Bleibt ihm wohl nichts anderes übrig als seinen Anbieter anzufragen, wenn er keinen Zugriff auf die .ini hat, bzw. auch nicht durch ini_set().? Oder hätte eine htaccess möglicherweise mehr Rechte?

                  Ich hab ja schon verlinkt auf die entsprechende Handbuchseite. Es kommt darauf an, ob PHP als Apache-Modul oder als FCGI/FPM ausgeführt wird. Wenn Apache-Modul, dann kann man (einige, nicht alle) PHP-Direktiven in die .htaccess schreiben (mit etwas anderer Syntax), ansonsten in eine Datei namens .user.ini (Syntax wie in der php.ini). Diese beiden Alternativen sollten üblicherweise verfügbar sein.

                  dedlfix.

            2. Also, ich habe beides in den Code geschrieben, hat keinerlei Auswirkungen ...

              Wenn ich mir mit phpinfo(); die Servereinstellungen anschaue, finde ich das

              display_errors Off Off

              1. Hallo Stefan,

                entwickelst Du auf dem Server? D.h. lokal editieren, sofort hochladen, ausführen?

                Du solltest eine lokale PHP-Installation mit einer Entwicklungsumgebung ins Auge fassen. Die kannst Du ohne Admin-Hilfe einstellen wie Du willst und bekommst Fehler, die schon den PHP-Parser aus der Fassung bringen, gleich rot von der IDE angepinselt.

                Rolf

                --
                sumpsi - posui - clusi
      2. Tach!

        Ich habe jetzt gefunden, dass in der Datei 'php.ini' der Parameter display_errors auf OFF steht.

        Nur kann ich das schlecht ändern, da ich keinen Zugriff auf diese Datei habe.

        Es gibt noch weitere Möglichkeiten, beispielsweise in der .user.ini.

        Ein ini_set('display_errors', 'On'); im Sourcecode hat leider auch keine Abhilfe geschaffen.

        Wenn der Code fehlerhaft ist, läuft er nicht los und dann kann auch die Funktion nicht aufgerufen werden.

        dedlfix.

  2. Tach!

    Was ich aber nicht hinbekomme, ist die Ausgabe von einfachen Syntax-Fehlern. Also Vertipper oder ein vergessenes Semikolon. Wenn ich ein catch / try um einen Codeblock mache, absichtlich einen Fehler in diesen einbaue, sehe ich keinerlei Fehlermeldung.

    try-catch ist zum Abfragen von Laufzeitfehlern. Außerdem zieht das nur bei Exceptions, nicht aber bei herkömmlichen PHP-Fehlermeldungen.

    Kann mir jemand ein Stichwort geben, wo nach ich googlen sollte? Bzw. direkt sagen, was ich wo einstellen muss, damit Syntaxfehler ausgegeben werden?

    In der php.ini oder gleichwertiger Konfiguration, dort die Werte für error_reporting und display_errors.

    display_errors aber nur auf der Entwicklungsumgebung, für den Produktivbetrieb lässt man das lieber in ein error_log-File schreiben.

    dedlfix.