Fehler bei include abfangen, wenn include-Datei fehlerhaft ist

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Fehler bei include abfangen, wenn include-Datei fehlerhaft ist

    Hallo,

    ich habe ein Problem:
    PHP4.4 wird genutzt
    Ich muss über einen include-Befehl Klassen (als Unterprogramm) einbinden. Manchmal kommt es vor, dass die Funktionen dieser Klasse fehlerhaft sind bzw. der Code nicht in Ordnung ist.
    Das Resultat: Mein Hauptprogramm stürzt ebenfalls ab und wird nicht mehr fortgesetzt. Ich bräuchte eine Möglichkeit, das Laden des Unterprogramms zu unterbinden, sofern dieses Fehlerhaft ist.
    @include hilft nicht weiter.
    Selbst wenn ich mit PHP5 arbeite und try-catch probiere, habe ich das selbe Resultat.
    Vielleicht kann mir ja jemand weiter helfen.

    Danke
    Brit

  • #2
    file_exists() vorher einbauen?

    Kommentar


    • #3
      file exists

      Hab ich, das löst aber das Problem mit dem fehlerhaften Code nicht.

      Kommentar


      • #4
        warum nicht?
        Code:
        wenn( benötigte dateien existieren )
           führe unterprogramm aus
        sonst
           gibt eine fehlermeldung aus

        Kommentar


        • #5
          Die Datei existiert ja, sie hat "nur" Fehler. Und dieser Fehler veranlaßt mein Hauptprogramm, zu stoppen, ohne auch nur eine Fehlermeldung anzuzeigen.

          Kommentar


          • #6
            kannst du evtl. ein minimales beispiel zusammenschreiben, um zu veranschaulichen, was du meinst?

            Kommentar


            • #7
              PHP-Code:
              if ($phpversion == 5)
              {
                  if (
              file_exists($datei))
                  {
                      try
                      {
                          @include 
              $datei;
                      }
                      catch (
              Exception $e)
                      {
                          
              $text_modul.="<h1>Daten nicht verfügbar</h1>";
                          
              $text_modul.= "Die angeforderten Daten können momentan nicht angezeigt werden.";
                          
              $text_modul.= "<p>Bitte kontaktieren Sie Ihren Administrator. <br/>";
                          
              $text_modul.= "Email: <a href='mailto:".$admin_mail."'>".$admin_mail."</a></p>";
                          
                      }
                  }
              }
              else 
              {
                  if (
              file_exists($datei) and @include $datei)
                      ...

              Kommentar


              • #8
                PHP-Code:
                if (file_exists($datei) and @include $datei
                dürfte m.w. sowieso nicht funktionieren.

                was steht denn in der datei $datei drin, dass es probleme bereitet?

                Kommentar


                • #9
                  vielleicht achtest du darauf das in jeder datei ein error_reporting gesetzt ist. ansonsten sollte eigentlich ein fehler angezeigt werden.
                  schau doch mal in der php.ini nach ob da ein error reporting ausgeschaltet ist.
                  Webdesign und Webentwicklung - Plunix.de

                  Kommentar


                  • #10
                    1. Der Befehl funktioniert, sofern die include-Datei in Ordnung ist.
                    2. in der include-Datei werden Daten aus einer Datenbank gelesen und aufgelistet und hundert tausende von anderen Aktionen ausgeführt (wäre zu langwierig, das alles zu beschreiben). Letztendlich ist es egal, WAS dort gemacht wird. Ich will ja nur wissen, ob es eine Möglichkeit gibt, den PHP-Interpreter zu überlisten, damit er mein Haupt-Programm weiter laufen läßt.

                    ganz einfaches Beispiel:
                    Programm 1:
                    PHP-Code:
                    print "Hauptprogramm";

                    $datei "unterprogramm.php";
                    if (
                    file_exists($datei) and @include $datei)
                    {
                        print 
                    "Unterprogramm geladen";
                    }
                    else
                    {
                        print 
                    "Unterprogramm fehlerhaft";

                    Programm 2:
                    PHP-Code:
                    print "Unterprogramm" 
                    Wenn ich das Hauptprogramm starte, bricht es ab, da das Unterprogramm einen Fehler hat (; fehlt).
                    Wenn ; eingesetzt wird, funktioniert alles.

                    Kommentar


                    • #11
                      Error-reporting ist eingeschaltet. Nur wenn das Unterprogramm eine Klasse ist, kommt kein Fehler.

                      Kommentar


                      • #12
                        den parser kann man eigentlich nicht umgehen, syntaktische fehler sind soweit wichtig, dass man sie nicht einfach ausschalten kann.

                        vielleicht lässt sich display_errors() vor und nach der ausführung des kritischen blocks irgendwie einsetzen?

                        Kommentar


                        • #13
                          eventuell hilft das weiter:
                          bool php_check_syntax ( string file_name [, string &error_message] )


                          For technical reasons, this function is deprecated and removed from PHP. Instead, use php -l somefile.php from the commandline.


                          aber wie kann es eigentlich passieren, dass das unterprogramm parse-fehler enthält - testest du den code nicht vorher?

                          Kommentar


                          • #14
                            Die Funktion gibts erst ab PHP5 und wurde inzwischen schon wieder rausgenommen. Hilft also auch nicht wirklich weiter.

                            Kommentar


                            • #15
                              Instead, use php -l somefile.php from the commandline.

                              Kommentar

                              Lädt...
                              X