Nico: Ordner auslesen

Hey,

habe eine Frage zu Php:

Wie kann ich testen ob in einem Ordner z.B. eine Datei mit dem Namen "beispiel" vorhanden ist?

mfg

  1. Hello,

    Wie kann ich testen ob in einem Ordner z.B. eine Datei mit dem Namen "beispiel" vorhanden ist?

    gar nicht wirklich.
    Du kannst nur testen, ob der Dteiname für den PHP-User-Prozess auffindbar ist und die Datei für ihn lesbar ist.

    is_readable()    http://www.php.net/manual/en/function.is-readable.php

    wäre ein Anfang.

    Harzliche Grüße vom Berg
    http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau

  2. Danke! Hat funktioniert!

  3. Hi!

    Wie kann ich testen ob in einem Ordner z.B. eine Datei mit dem Namen "beispiel" vorhanden ist?

    Da gibt es verschiedene Ansätze.

    Beschreibung aus SelfPHP
    "Mit is_file() kann man überprüfen, ob eine Datei (filename) existiert und ob es sich bei der Datei um eine reguläre Datei handelt.
    Wenn die Datei existiert und es eine reguläre Datei ist, gibt diese Funktion true, sonst false zurück."

    Wenn du, wie im Titel deines Postings geschrieben, allerdings wirklich ein Verzeichnis auslesen willst, dann kannst du dies mit readdir() tun.
    Die Dateinamen der gefundenen Files könntest du in einem Array speichern.
    Oder du vergleichst die gefundenen Dateinamen einfach mit dem Namen deines gesuchten Files.

    <?php  
    if ( $handle = opendir( '/pfad/zu/deinem/ordner' ) )  
    {  
     while ( ( $entry = readdir( $handle ) ) !== FALSE ) // typsicherer Vergleich, damit Verzeichnis- oder Dateiname "0" nicht zum Abbruch führt.  
     {  
      if ( $entry == "beispiel" )  
      {  
       echo "Ja, Datei \"$entry\" ist vorhanden.";  
      }  
     }  
     closedir( $handle );  
    }  
    ?>
    

    Hierbei wären zwei Dinge zu beachten.
    1. Du darfst die Dateien nicht folgendermaßen auslesen:
    while ( $entry = readdir( $handle ) )
    Das sieht im ersten Moment zwar gut aus, aber wenn du in deinem Ordner eine Datei oder ein Verzeichnis namens "0" oder "false" hast, dann ist damit die while-Schleife beendet.
    Darum der typsichere Vegleich:
    while ( ( $entry = readdir( $handle ) ) !== FALSE )

    2. Innerhalb der Schleife werden bei jedem Verzeichnis (sofern du dich nicht in / befindest) die beiden Files "." und ".." auftauchen.
    "." ist ein Link auf das aktuelle Verzeichnis und ".." einer auf das übergeordnete Verzeichnis.
    Wenn man den Inhalt eines Ordners ausgeben will, möchte man diese Files in den meisten Fällen wohl nicht angezeigt bekommen.
    Insofern sollte man dann eine zusätzlich Abfrage einbauen:
    if ( $entry != "." && $entry != ".." )

    Um einfach nur zu checken, ob eine Datei vorhanden ist oder nicht, würde ich mir allerdings nicht soviel Aufwand machen und das komplette Verzeichnis durchlaufen.
    Dafür würde ich dann lieber is_file() einsetzen. Das ist mit einer Zeile Code erledigt. Da brauchst du weder ein Dateihandle öffnen, noch eine Schleife einsetzen:
    <?php if ( is_file( "order/datei.png" ) ) echo "Datei ist vorhanden."; ?>

    Schöner Gruß,
    rob