JensW: ErrorHandling geändert file_get_contens

Hi,

wurde bei früheren als der aktuellen PHP-version nicht eine fehlende Datei als echter Erro gezeigt und nicht nur als notice?

Das Gleiche gilt für readfile, file, usw....

Ich wundert mich warum ich mit file_get_contents() keine bestimmte Datei auslesen konnte. Da ich einfache notice-meldungen nicht ausgebe, weil die auch viel Blödsinn zeigen, kam keine Warnung, denn ich hatte den Dateinamen falsch geschrieben und so existierte sie natürlich nicht.

Als ich dann umstellte auf error_reporting(E_ALL); sah ich es, aber eben lediglich als notice. Ist doch irgendwie befremdlich. Also ist das neu oder mir früher nie aufgefallen? Und vor allem wie(wahrscheinlich gar nicht) kann ich solche, für mich doch wichtigen, Notice-Fehler anzeigen, während ich die belanglosen notices nicht sehen will?

Jens

  1. echo $begrüßung;

    wurde bei früheren als der aktuellen PHP-version nicht eine fehlende Datei als echter Erro gezeigt und nicht nur als notice?

    Echt oder falsch gibt es nicht, nur unterschiedliche Level. Als E_NOTICE wird eine fehlende Datei sicher nicht signalisiert, wenn dann eher als E_WARNING (hab's grad eben mit PHP 5.2.5 probiert und bestätigt bekommen). Ich nehme an, dass du auch die Warnungen unterdrückst.

    Ich wundert mich warum ich mit file_get_contents() keine bestimmte Datei auslesen konnte. Da ich einfache notice-meldungen nicht ausgebe,

    Und vermutlich wertest du auch das Funktionsergebnis nicht richtig aus, denn dann hättest du am zurückgegebenen false den Fehler erkennen und darauf reagieren können.

    weil die auch viel Blödsinn zeigen,

    Blödsinn. Wenn irgendwas eine Meldung erzeugt, egal welches Level, dann hast du ein Problem, das du lediglich ignorierst.

    Als ich dann umstellte auf error_reporting(E_ALL); sah ich es, aber eben lediglich als notice. Ist doch irgendwie befremdlich. Also ist das neu oder mir früher nie aufgefallen? Und vor allem wie(wahrscheinlich gar nicht) kann ich solche, für mich doch wichtigen, Notice-Fehler anzeigen, während ich die belanglosen notices nicht sehen will?

    "Belanglose" E_NOTICE-Meldungen klären über Zugriffe auf nicht existente (Schreibfehler) oder nicht initialisierte Variablen auf. Es gibt keinen Grund, so zu programmieren, dass PHP einen Grund hätte E_NOTICE-Meldungen zu erzeugen.

    echo "$verabschiedung $name";

    1. Hi,

      Echt oder falsch gibt es nicht, nur unterschiedliche Level. Als E_NOTICE wird eine fehlende Datei sicher nicht signalisiert, wenn dann eher als E_WARNING (hab's grad eben mit PHP 5.2.5 probiert und bestätigt bekommen). Ich nehme an, dass du auch die Warnungen unterdrückst.

      nein unterdrücke ich nicht. Habe aber nun des Rätsels Lösung:

      $dast ='datei.txt';
      $yy=file_get_contents($dat);

      ergbit notice KEINE E_WARNING

      $dat ='datei.txt';
      $yy=file_get_contents($dat);

      ergbit  E_WARNING, wenn die Datei nicht vorhanden ist.

      Also Fazit:
      PHP führt anscheinend file_get_contents() gar nicht erst aus wenn die
      Variable nicht existiert, interessant und ein wenig ungewohnt.

      Blödsinn. Wenn irgendwas eine Meldung erzeugt, egal welches Level, dann hast du ein Problem, das du lediglich ignorierst.

      Ich sehe gewisse notices wie undeklarierte Variabeln die sich erst zur Laufzeit bilden nicht als Problem an und sehe bestimmt nicht ein unnötige Ballast-Routinen zu schreiben nur damit ja keine notice mehr erscheint.

      "Belanglose" E_NOTICE-Meldungen klären über Zugriffe auf nicht existente (Schreibfehler) oder nicht initialisierte Variablen auf. Es gibt keinen Grund, so zu programmieren, dass PHP einen Grund hätte E_NOTICE-Meldungen zu erzeugen.

      Wenn es dafür keinen Grund gäbe, würden nicht so dermaßen viele Scripte von guten Leuten im Netz solche notices aufweisen.

      Dank fürs Testen(dadurch bin ich drauf gekommen)
      Jens

      1. Hello,

        Ich sehe gewisse notices wie undeklarierte Variabeln die sich erst zur Laufzeit bilden nicht als Problem an und sehe bestimmt nicht ein unnötige Ballast-Routinen zu schreiben nur damit ja keine notice mehr erscheint.

        Ui!
        Bist Du bei der Entwicklung der künstlichen Intelligenz nun schon zu bionischen Programmen vorgestoßen, dass sich da etwas von alleine bildet?

        Das solltest Du zum Patent anmelden

        Liebe Grüße aus Syburg bei Dortmund

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
      2. echo $begrüßung;

        [...] Habe aber nun des Rätsels Lösung:

        $dast ='datei.txt';
        $yy=file_get_contents($dat);

        ergbit notice KEINE E_WARNING

        Der Zugriff auf die nicht vorhandene Variable $dat ergibt die Notice. Lesezugriffe auf nicht vorhandene Variablen ergeben NULL. file_get_contents(NULL) gibt keine Meldung aus, signalisiert aber durch den Rückgabewert false, dass es nicht erfolgreich war.

        Also Fazit:
        PHP führt anscheinend file_get_contents() gar nicht erst aus wenn die Variable nicht existiert, interessant und ein wenig ungewohnt.

        Doch, die Ausführung findet statt, nur eben mit false als Ergebnis.

        Ich sehe gewisse notices wie undeklarierte Variabeln die sich erst zur Laufzeit bilden nicht als Problem an und sehe bestimmt nicht ein unnötige Ballast-Routinen zu schreiben nur damit ja keine notice mehr erscheint.

        Du siehst ja, dass E_NOTICE hilfreich ist, um Tippfehler in Variablennamen angezeigt zu bekommen. Ein Programm besteht im Allgemeinen aus einem Teil, der die eigentliche Zielsetzung löst und jeder Menge "unnötigem Ballast", der beispielsweise für (Eingabe-)Prüfungen und Reaktionen auf Fehlerzustände zuständig ist und damit eine robuste Arbeitsweise sorgt.

        Es gibt keinen Grund, so zu programmieren, dass PHP einen Grund hätte E_NOTICE-Meldungen zu erzeugen.
        Wenn es dafür keinen Grund gäbe, würden nicht so dermaßen viele Scripte von guten Leuten im Netz solche notices aufweisen.

        Nur weil jemand ein umfangreiches, bekannt gewordenes Projekt auf die Beine stellt, heißt das noch lange nicht, dass er das (von vorn herein) gut gemacht hat. Prominente Beispiele hören auf Namen wie phpBB oder WordPress.

        echo "$verabschiedung $name";