Ergebnis 1 bis 11 von 11

Thema: Contao-exception: wie PHP - try - catchall funktiontüchtig machen?

  1. #1
    Contao-Nutzer
    Registriert seit
    05.06.2019.
    Beiträge
    15

    Standard Contao-exception: wie PHP - try - catchall funktiontüchtig machen?

    Hallo zusammen,

    ich benutze nutze in den Artikeln manchmal ein PHP Script.

    Dieses Script soll externe Daten bei Bedarf nachladen und dabei kann es manchmal auch zum Fehlerfall kommen.

    Um das zu Regeln habe ich eine Try-Catch-Exception für den den kleinen zusätzlichen Code-Teil gebastelt.

    Doch das Problem ist, das Contao den Fehler scheinbar selber abfängt und damit die Seite immer an der Stelle manchmal unzugänglich wird.


    In Trockentests ohne Contao läuft das Script perfekt. Auch im Fehlerfall benimmt es sich genau wie es soll.

    Doch wie kann man in Contao die eigene Fehlerkontrolle abschalten?


    Kann man diese Fehlerkontrolle für kurze Momente irgendwie überschreiben?

    try {


    } catch (Exception $e) {
    echo PHP_EOL . '<!-- Caught exception: ', $e->getMessage(), ' -->' . PHP_EOL;
    }



    Bei meinen Tests stellte ich fest, dass man nicht mal mit @befehl solche Problemfälle ausklammern kann.

  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    24.030
    Partner-ID
    10107
    User beschenken
    Wunschliste

    Standard

    Ich vermute dieser Code befindet sich in einem bestimmten Namespace und nicht im Root Namespace? Und ich vermute du willst alle Exceptions abfangen, die von \Exception erben? Dann musst du auch \Exception angeben und nicht Exception.

  3. #3
    Contao-Nutzer
    Registriert seit
    05.06.2019.
    Beiträge
    15

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Ich vermute dieser Code befindet sich in einem bestimmten Namespace und nicht im Root Namespace? Und ich vermute du willst alle Exceptions abfangen, die von \Exception erben? Dann musst du auch \Exception angeben und nicht Exception.
    Hallo.

    Danke für den TIPP, doch leider einfach im catch ein \Exception zu schreiben, hat dem ganzen leider nicht geholfen :-(

    Kann man Try/Catch vielleicht irgendwie anders wieder "rooten", so dass die Funktion wieder normal Funktioniert?


    Bzw. kann man die Fehlerbehandlung in Contao ganz abschalten?

  4. #4
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    24.030
    Partner-ID
    10107
    User beschenken
    Wunschliste

    Standard

    Poste Fehlermeldung und Code nach deiner Änderung.

  5. #5
    Contao-Nutzer
    Registriert seit
    05.06.2019.
    Beiträge
    15

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Poste Fehlermeldung und Code nach deiner Änderung.
    cont.png

    stark vereinfacht Fehler:

    try {
    echo (0/0);
    } catch (\Exception $e) {
    echo 'test';
    };

  6. #6
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    24.030
    Partner-ID
    10107
    User beschenken
    Wunschliste

    Standard

    Im Screenshot sieht man nur die Fehlerseite der Produktionsumgebung. Benutze den Debug-Modus.

  7. #7
    Contao-Nutzer
    Registriert seit
    05.06.2019.
    Beiträge
    15

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Im Screenshot sieht man nur die Fehlerseite der Produktionsumgebung. Benutze den Debug-Modus.
    Das dachte ich mir fast, dass der Screenshot absolut nichts bringt.


    Als das try-catch-Beispiel steht als einziges gerade in einer html5-Datei im Template-Verzeichnis.


    Ein umstellen auf dev bringt leider auch nicht viel.

    Die verwendeten Module sorgen für so viele kleinen Fehlermeldungen, dass man zum Division by 0 Fehler gar nicht erst kommt.
    (erschreckend, wie die Qualität wohl gelitten hat)

    Deshalb kann ich die genauere Fehlermeldung leider nicht liefern, grosses sorry.

    Aber trotzdem Danke für den Versuch.

    Ich werde denke nun einen direkt PHP versuchen und das gesamte Contao System total umgehen.

    Ich denke ich lade ich die PHP als iframe, auch wenn es kein schöner Weg ist.

    Alternativ könnte ich auch die Fehlerbehandlung direkt in Kerndateien von Contao suchen und dort "eliminieren".
    Dann darf man nur keine Updates mehr machen ;-)
    Geändert von maumaui (10.06.2020 um 22:50 Uhr)

  8. #8
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    24.030
    Partner-ID
    10107
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von maumaui Beitrag anzeigen
    Die verwendeten Module sorgen für so viele kleinen Fehlermeldungen, dass man zum Division by 0 Fehler gar nicht erst kommt.
    (erschreckend, wie die Qualität wohl gelitten hat)
    Wie bitte?



    Zitat Zitat von maumaui Beitrag anzeigen
    Deshalb kann ich die genauere Fehlermeldung leider nicht liefern, grosses sorry.
    Ich verstehe nicht was du meinst. Benutze wie gesagt den Debug-Modus. Dort siehst du den Fehler, inkl. Stack Trace.



    Zitat Zitat von maumaui Beitrag anzeigen
    Ich werde denke nun einen direkt PHP versuchen und das gesamte Contao System total umgehen.

    Ich denke ich lade ich die PHP als iframe, auch wenn es kein schöner Weg ist.
    Ich verstehe nicht was du vor hast.



    Zitat Zitat von maumaui Beitrag anzeigen
    Alternativ könnte ich auch die Fehlerbehandlung direkt in Kerndateien von Contao suchen und dort "eliminieren".
    Dann darf man nur keine Updates mehr machen ;-)
    Warum willst du die Kerndateien von Contao verändern?

  9. #9
    Contao-Nutzer
    Registriert seit
    05.06.2019.
    Beiträge
    15

    Standard

    Also.

    Ich will einfach bei einem Fehler beim ausführen eines PHP-Befehl als Fehler erkennen und diesen dann mit Catch abfangen.

    Im Grunde was sehr einfaches, würde Contao mir diesen Fehler nicht "wegnehmen" und die gesamte Unterseite abschalten.

    (Doch genau dieses Verhalten wollte ich gerne abschalten.)

    Damit das nicht mehr passiert, muss ich in das PHP-Script ins /web verschieben und dort direkt ausführen.

    Ich denke ich werde es via Ajax aufrufen und dynamisch nachladen.


    Und zum Debug-Modus: Die Liste der Hinweise und Fehlermeldungen war 15 Druckseiten lang. Und der Fehler, um welchen es eigentlich ging, wurde gar nicht erreicht.
    Ich müsste ein leeres neues Contao aufsetzen. Hier müsste ich dann ein Template modifizieren und den oben geposteten Code reinkopieren:

    Code:
    try {
    echo (0/0);
    } catch (\Exception $e) {
    echo 'test';
    };
    Ich wette aber langsam, dass es dann trotzdem funktionieren würde, da du so von dem \ überzeugt bist. Also gehe ich lieber den "einfacheren" Weg.

    Der Ur-Fehler steckt vermutlich in den Plugins. Und die sollte man wegen der ständigen vielen Updates erst gar nicht abändern ;-)


    Trotzdem vielen Dank.

  10. #10
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    24.030
    Partner-ID
    10107
    User beschenken
    Wunschliste

    Standard

    Benutze den Debug-Modus und poste den Stack Trace.

  11. #11
    Contao-Urgestein
    Registriert seit
    29.10.2009.
    Ort
    Magdeburg
    Beiträge
    1.971
    Partner-ID
    626
    User beschenken
    Wunschliste

    Standard

    Division by zero wirft keine exception, sondern nur eine Warning. Damit kann der Code nicht funktionieren. Im debug modus fängt Contao/symfony solche Warning an und trackt diese als exceptions.

    Ggf. brauchst du einen eigenen error handler

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •