Lothar: Fehlermeldung unterdrücken

Hi, (wie) kann ich die Fehlermeldung unterdrücken, wenn die Datei, die in require_once angegeben ist, nicht vorhanden ist? Danke Lothar

  1. Hallo,

    (wie) kann ich die Fehlermeldung unterdrücken, wenn die Datei, die in require_once angegeben ist, nicht vorhanden ist?

    indem du include_once verwendest, dann gibts nur eine Warnung.

    Gruß
    Kalk

  2. Hi, (wie) kann ich die Fehlermeldung unterdrücken, wenn die Datei, die in require_once angegeben ist, nicht vorhanden ist?

    if ( is_file( $file ) && is_readable( $file ) ) {
       require_once( $file );
    }
    

    Das ist aber blöd, denn dann stellt sich die Frage warum in aller Welt require_once und nicht include_once verwendet werden soll?

    Die bei Verwendung von include_once im Fehlerfall fällige Warnung könnte man mit error_reporting( E_ALL & ~E_WARNING ) unterdrücken.

    Willst Du aber den Fehler (der ja keiner sein soll) abfangen und selbst reagieren, dann gehe entweder wie oben vor (da musst Du selbst an alles denken) oder probiere try … catch

    try {
        require_once( $file );
    } catch (Exception $e) {
        echo 'Exception abgefangen: ',  $e->getMessage(), "\n";
    }
    

    Eine Frage bleibt noch: Willst Du nicht vielleicht lieber readfile( $file )? Erwartest Du denn PHP in der zu inkludierenden Datei? Falls nicht kann Dein Vorhaben in einer Katastrophe enden.

  3. Hallo Lothar,

    (wie) kann ich die Fehlermeldung unterdrücken, wenn die Datei, die in require_once angegeben ist, nicht vorhanden ist?

    Mit error_reporting(0); kannst du die Fehlermeldungen komplett abschalten. Bei Verzicht auf require_once("nicht_vorhandene_Datei") gibt es die Fehlermeldung natürlich auch nicht.

    Vielleicht solltest du etwas mehr mitteilen.

    Bis demnächst
    Matthias

    --
    Pantoffeltierchen haben keine Hobbys.
    1. Hallo,

      Verzicht auf require_once("nicht_vorhandene_Datei")

      finde ich jetzt die schönste Lösung… (+1)

      Gruß
      Kalk

      1. finde ich jetzt die schönste Lösung…

        Die kann aber in Abhängigkeit von der (bestenfalls bruchstückhaft bekannten) Aufgabe immer noch falsch sein. Wenn der TO schon require_once und include_once nicht wirklich kennt, kann readfile() sehr geeigneter sein.

        1. Hallo,

          schönste Lösung…

          noch falsch sein.

          schön und falsch schließt sich ja nicht gegenseitig aus...

          Gruß
          Kalk

          1. Zudem folgt auf require_once im Fehlerfall stets (sofern nicht mit try … catch abgefangen) ein PROGRAMMABRUCH. Die Warnung oder den Fehler mittels error_reporting(0) nicht anzuzeigen ist bei aller Schönheit "eher nicht hilfreich".

            1. Hallo,

              "eher nicht hilfreich".

              bitte lies genauer. Ich bezog mich explizit nicht auf das error-reporting.

              Gruß
              Kalk

              1. Ich bezog mich explizit nicht auf das error-reporting.

                Das ist mir klar. Das stand aber in der gelobten Antwort halt mit drin.

                Ich denke, die umfassendste Antwort ist:

                try {
                    ### Wenn PHP in $file erwartet wird und "abgearbeitet" werden soll:
                    ## Falls Datei sonst womöglich mehrfach geöffnet wird:
                    # require_once( $file ); 
                    ## Falls Datei NICHT womöglich mehrfach geöffnet wird: 
                    # require( $file ); 
                    ### Falls Inhalt nur ausgegeben werden soll: 
                    readfile( $file );
                } catch ( Exception $e ) {
                    echo 'Exception abgefangen: ',  $e->getMessage(), "\n";
                    # (oder was auch immer geschehen soll.)
                }
                

                Die löst auch das Problem, dass die Datei womöglich in der Tausenstelsekunde zwischen is_file() && is_readable() und dem Leseversuch gelöscht wird.

    2. Hello,

      (wie) kann ich die Fehlermeldung unterdrücken, wenn die Datei, die in require_once angegeben ist, nicht vorhanden ist?

      Mit error_reporting(0); kannst du die Fehlermeldungen komplett abschalten. Bei Verzicht auf require_once("nicht_vorhandene_Datei") gibt es die Fehlermeldung natürlich auch nicht.

      Fehlermeldungen und Fehlerreaktionen in PHP komplett abzuschalten ist die schlechteste Idee, die ich in diesem Zusammenhang jemals gelesen habe ;-P

      Bitte nimm den Vorschlag zurück.

      Glück Auf
      Tom vom Berg

      --
      Es gibt nichts Gutes, außer man tut es!
      Das Leben selbst ist der Sinn.
      1. Hallo TS,

        (wie) kann ich die Fehlermeldung unterdrücken […]?

        Mit error_reporting(0); kannst du die Fehlermeldungen komplett abschalten. Fehlermeldungen und Fehlerreaktionen in PHP komplett abzuschalten ist die schlechteste Idee, die ich in diesem Zusammenhang jemals gelesen habe ;-P

        Ja. Ebenso wie der Wunsch, die Fehlermeldung zu unterdrücken.

        Bis demnächst
        Matthias

        --
        Pantoffeltierchen haben keine Hobbys.
  4. Hello,

    (wie) kann ich die Fehlermeldung unterdrücken, wenn die Datei, die in require_once angegeben ist, nicht vorhanden ist?

    Das solltest Du gar nicht erst versuchen. Denn mit Require(_Once) werden nur Dateien eingebunden, die zwingend erforderlich sind.

    Du kannst aber vorher nachschauen, ob es die Datei gibt und ob dein Script sie lesen darf. Das ist dann zwar nicht atomar (die Datei könnte wenige Millisekunden später schon nicht mehr lesbar sein), aber für die Praxis ist es meistens hinreichend, weil Das Script ja bei include_once() spätestens abbrechen würde, wenn die Verhältnisse sich verschlechtert haben.

    Glück Auf
    Tom vom Berg

    --
    Es gibt nichts Gutes, außer man tut es!
    Das Leben selbst ist der Sinn.