PHP-Warnmeldungen, muss das sein?

  • Hallo,

    ich habe, um nicht unnötig viel Code schreiben zu müssen, die Funktion filetype() für verschiedene Tests benutzt. So wird in einem Durchgang geprüft, ob eine Datei oder Ordner mit betreffendem Name existiert, wenn ja ob es sich um einen Ordner handelt, oder etwas beliebiges anderes ist. Siehe Beispielcode:

    Mein Problem ist jetzt folgendes: Wenn der Ordner noch nicht existiert, dann ist das ja kein Fehler kein Problem oder ähnliches. Die Funktion filetype() lefert FALSE, das ist super für den weiteren Programmverlauf und soll so sein. Aber PHP knallt mir dann folgende Warnmeldung ins HTML-Dokument:

    Code
    Warning: filetype() [function.filetype]: Lstat failed for html/testordner in /var/http/admin/edit-save.php on line 40

    Das ist echt dämlich. Wozu sollen solche Warnmeldungen gut sein? Was mache ich da am besten?

  • Das ist nicht dämlich, sondern logisch. Wenn ein verzeichnis nicht existiert, was soll PHP da machen? Wozu gibt es file_exists??? Alternativ könnte man die Warnung mit einem @ vorm funktionsaufruf unterdrücken, was aber unsauber wäre.

  • Zitat

    Das ist nicht dämlich, sondern logisch.


    Logik kommt wohl auch auf den Blickwinkel des Betrachters an. Ich jedenfalls bin der Meinung, dass Programmcode möglichts kurz und einfach gehalten werden muss. Jede unnötige if-Abfrage und jeder zusätzlicher Funktionsaufruf ist Ressourcenverschwendung. Gerade bei Skriptsprachen wie PHP merkt man das schnell. Auf gut besuchten Seiten läuft da öfters mal gar nichts mehr, wenn viele Leute online sind.

    Zitat

    Wenn ein verzeichnis nicht existiert, was soll PHP da machen?


    Na ganz einfach: Die Funktion filetype() liefert als Rückgabewert FALSE. Was will man mehr?

    Ob daraufhin das Programm stillschweigend auf das (eventuelle) Problem reagiert, oder ob eine Warnung bzw. Fehlermeldung an den User ausgegeben wird, das sollte nach wie vor der Programmierer entscheiden. Dem Normal-User jedenfalls wird eine PHP-Meldung kaum etwas verständliches sagen.

    Zitat

    Warnung mit einem @ vorm funktionsaufruf unterdrücken, was aber unsauber wäre.


    Und was wäre daran unsauber? Immerhin weiss das Skript was zu tun ist, je nach Rückgabewert, es sind also alle Möglichkeiten berücksichtigt.

  • Zitat von PHP-Doku

    Gibt FALSE zurück, wenn ein Fehler auftrat. filetype() erzeugt auch eine E_NOTICE Meldung, wenn der stat-Aufruf fehlschlägt oder der Dateityp ubekannt ist.

    Wo liest du da, dass es keine Notice ausgeben soll, wenn die datei nciht existiert? ;)
    Also passt das alles so wies ist und die funktion gibt nen fehler auf, weil sie die Datei nicht findet

    Also ist das auch kein unnötiger code

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • @matman
    wenn du sowieso alles besser weißt, warum fragst du dann eigentlich noch?

  • Jetzt hört doch mal auf!
    Also:

    So einfach...
    !== ist hier übrigens wirklich zu empfehlen, gibt ja Dateien ohne Endung und solche Sachen...

    Viele liebe Grüße
    The User