de.comp.lang.php.* FAQ

28.23. Warning: fopen() - No such file or directory

Keywords: Fehler | fopen | Datei | URL

Antwort von Kai Schröder

Diese Warnung besagt, dass die Datei oder das Verzeichnis, das mit fopen() geöffnet werden soll, nicht existiert.

Die Ursache dafür kann vielfältig sein:

  1. Die Datei, die geöffnet werden soll, existiert nicht.

    Dies passiert besonders häufig beim Zugriff auf URLs. Prüfen lässt sich die Existenz mit einem Browser. Der häufigste Fehler ist die Verwendung von relativen URLs. Richtig sind absolute URLs, die mit http:// oder ftp:// beginnen.

    Quellcode-Beispiele:

    <?php
    /*
    Die externe URL http://www.example.com/verzeichnis/datei.ext soll gelesen werden.
    */
    
    /*
    in diesem Fall falsch, da eine URL absolut angegeben werden muss
    dieses Beispiel würde versuchen, die Datei datei.ext in
    /verzeichnis auf dem eigenen Server zu öffnen.
    */
    $fp = fopen("/verzeichnis/datei.ext", "r");
    
    /* richtig */
    $fp = fopen("http://www.example.com/verzeichnis/datei.ext", "r");
    ?>
    
  2. Das Verzeichnis existiert nicht.

    fopen() erstellt keine Verzeichnisse, wenn diese fehlen. Im Gegensatz dazu werden fehlende Dateien von fopen() automatisch angelegt, wenn sie zum schreiben geöffnet werden.

    Häufig wird in ChangeRoot-Umgebungen gearbeitet. Dies hat zur Folge, dass das Root-Verzeichnis des Users (z. B. /home/user/) von der Server-Root abweicht (/). Genaueres erfährt man durch die Verwendung von phpinfo() .

    Quellcode-Beispiele:

    <?php
    /*
    die DocumentRoot sei /home/user und die zu öffnende Datei file.ext
    im Verzeichnis mydir
    */
    
    /* falsch */
    $fp = fopen("/mydir/datei.ext", "r");
    
    /* richtig */
    $fp = fopen("/home/user/mydir/file.ext", "r");
    ?>
    

    Desweiteren kann es vorkommen, dass sich Tippfehler im Pfad befinden. Ein häufig übersehener Fehler sind Leerzeichen am Anfang, im Pfad oder an dessen Ende.

    Code-Beispiele:

    <?php
    /* falsch, Leerzeichen am Anfang */
    $fp = fopen(" /verzeichnis/datei.ext", "w");
    
    /* falsch, Leerzeichen im Pfad */
    $fp = fopen("/verzeichnis/ datei.ext", "a+");
    
    /* falsch, Leerzeichen am Ende */
    $fp = fopen("/verzeichnis/datei.ext ", "r+");
    
    /* richtig */
    $fp = fopen("/verzeichnis/datei.ext", "w");
    ?>
    

Valid HTML 4.01! Valid CSS!

28.23. Warning: fopen() - No such file or directory
http://www.php-faq.de/q/q-fehler-no-file.html
Archiv der de.comp.lang.php-FAQ Dies ist eine Archivseite von 2008 und wurde seitdem nicht geändert. Das dclp-FAQ-Team