Die Energie des Verstehen-Wollens: NUR Unterverzeichnisse eines Ordners auflisten, keine Dateien

Hallo, Leute!!

Ich hoffe es ist noch jemand wach zu solch später stunde, denn ich brauch hilfe. dringende hilfe. ich krieg es einfach nicht hin!!
ich hab mich schon halbtot gegoogled, ich finde einfach nichts ...

aaaaaaaaalso:

Ich habe ein verzeichnis ("galerie/urlaub"). in diesem verzeichnis gibt es jetzt mehrere dateien und ordner. ich brauche nun ein script, das mein verzeichnis ausliest und hinterher NUR (!) die ordnernamen der unterverzeichnisse auflistet.
ich bin ein totaler php newbie und hab versucht das mit google hinzukriegen, indem ich mir einfach verschiedene codes anschaue und abändere, aber ich kriegs einfach nicht hin ..

bitte, ihr seid meine letzte hoffnung!!
das hier hab ich jetzt:

  
<?php  
$aktDir  = opendir("galerie/feten");  
$aktDirInhalt  = array("0");  
while ($file = readdir ($aktDir))  {  
if($file != "." && $file != "..")  {  
$gros = ucfirst($file);  
array_push ($aktDirInhalt, "$gros<br>");  
} //if-Abfrage ende  
} //while Ende  
$anzahl = count($aktDirInhalt);  
sort ($aktDirInhalt);  
for($x = 1; $x <= $anzahl; $x++)   {  
echo $aktDirInhalt[$x];  
}  
closedir($aktDir);  
?>  

aber das listet mir alle dateien und ordner auf, ich brauch aber nur die ordner. was muss ich an dem script ändern um nur die ordner zu listen.

ich brauche eure hilfe :(

gruß,
tön

  1. Moin!

    Ich habe ein verzeichnis ("galerie/urlaub"). in diesem verzeichnis gibt es jetzt mehrere dateien und ordner. ich brauche nun ein script, das mein verzeichnis ausliest und hinterher NUR (!) die ordnernamen der unterverzeichnisse auflistet.

    Frage einfach ab, ob der gefundene Name ein Directory ist, oder nicht. Wenn ja: Listen. Wenn nein - nicht listen.

    Funktionen, die zu Dateinamen Infos aus dem Dateisystem bringen, stehen im PHP-Manual: http://de2.php.net/manual/de/ref.filesystem.php

    Ich schlage vor, du schaust dir die gesamte Liste an Befehlen einmal durch, damit du weißt, was auf diesem Sektor möglich ist. Und dabei findest du dann auch den Befehl, der dich informiert, ob ein Name ein Directory ist, oder nicht.

    - Sven Rautenberg

    --
    "Love your nation - respect the others."
    1. Hallo Sven!

      Du meinst sicher is_dir, oder?
      Damit habe ich es schon versucht, irgendwie klappt das nicht. Wenn ich die if-Abfrae folgendermaßen formuliere:

        
      if($file != "." && $file != ".." && is_dir($file))
      

      Dann gibt mir das Script gar nichts mehr aus!
      Habe ich eine falsche Syntax oder wo ist mein Fehler?

      Gruß,
      Anton

      1. Moin!

        Du meinst sicher is_dir, oder?

        Richtig.

        Damit habe ich es schon versucht, irgendwie klappt das nicht. Wenn ich die if-Abfrae folgendermaßen formuliere:

        if($file != "." && $file != ".." && is_dir($file))

        
        >   
        > Dann gibt mir das Script gar nichts mehr aus!  
        > Habe ich eine falsche Syntax oder wo ist mein Fehler?  
          
        is\_dir() braucht den kompletten Pfadnamen, sonst arbeitet es im "aktuellen Verzeichnis" - was nicht dasselbe ist, wie das Verzeichnis, welches du mit opendir() geöffnet hast.  
          
         - Sven Rautenberg
        
        -- 
        "Love your nation - respect the others."
        
        1. Da leckt mich doch die Waldfee!!

          Es geht, ich glaub es kaum :)
          Vielen Dank, euch beiden, Dennis und Sven!!

          Dir auch lieben Dank, Ashura, ich schau mir das mit glob noch mal an, vielleicht kann ich was damit anfangen ^^

          Bis zum nächsten Mal, meine Lieben :-*

          Gruß,
          Tönsen

      2. Hi tön,

        if($file != "." && $file != ".." && is_dir($file))

          
        An der Stelle dürfte in $file nur der Ordnername stehen, du musst vor den Ordnernamen aber schon auch den Pfad zum Ordner schreiben, also  
          
          is\_dir("galerie/feten/" . $file)  
          
          
        MfG, Dennis.
        
        -- 
        Mein [SelfCode](http://community.de.selfhtml.org/fanprojekte/selfcode.htm): [ie:{ fl:( br:> va:) ls:\[ fo:) rl:( n4:# ss:) de:\] js:| ch:{ sh:| mo:} zu:|](http://www.peter.in-berlin.de/projekte/selfcode/?code=ie%3A%7B+fl%3A%28+br%3A%3E+va%3A%29+ls%3A%5B+fo%3A%29+rl%3A%28+n4%3A%23+ss%3A%29+de%3A%5D+js%3A%7C+ch%3A%7B+sh%3A%7C+mo%3A%7D+zu%3A%7C)  
        [Patch zur Verwendung von PATHINFO in JLog](http://www.gymnasium-odenthal.de/~dennis/jlog/PATHINFO-Fix-1.0.1/)  
          
        Wenn Sie einen Schweizer Bankier aus dem Fenster springen sehen, springen Sie hinterher. Es gibt bestimmt etwas zu verdienen. (Voltaire)
        
  2. Hallo DEDVW.

    das hier hab ich jetzt:

    […]

    Ick glob dit jeht auch eefacher, wa? (Hier sollte bereits „*/“ genügen.)

    Einen schönen Freitag noch.

    Gruß, Ashura

    --
    sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
    „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
    [HTML Design Constraints: Logical Markup]
    1. Moin!

      (Hier sollte bereits „*/“ genügen.)

      Es gibt so schöne Flags für glob - wenn man sich die Mühe machen möchte, die Skriptstruktur komplett umzustellen.

      - Sven Rautenberg

      --
      "Love your nation - respect the others."
  3. Liebe Energie,

    ich habe mir einmal das hier gebastelt. Möge es jemanden von Nutzen sein:

    <?php  
      
    /* Funktion zum Auslesen eines Verzeichnisses  
    *  
    * (array) verzeichnis_auslesen( (string) $pfad [,(string) $welche[, (boolean) $rekursiv]] )  
    * $pfad = Verzeichnispfad relativ zum aufrufenden Script  
    * $welche = Verzeichnisse und/oder Dateien? ('alle', 'verzeichnisse', 'dateien')  
    * $rekursiv = Unterverzeichnisse mit auflisten? ( true, false)  
    *  
    */  
      
       function verzeichnis_auslesen($pfad, $welche = 'alle', $rekursiv = true)  
          {  
          $pfad = preg_replace('~(.*)/$~', '\\1', $pfad); // letzten Slash aus dem String entfernen  
          $liste = array();  
          $lesezugriff = opendir($pfad);  
          while($ein_eintrag = readdir($lesezugriff))  
             {  
             switch($welche)  
                   {  
                   case 'dateien':  
                      if (is_file("$pfad/$ein_eintrag"))  
                         $liste[] = $rekursiv ? "$pfad/$ein_eintrag" : $ein_eintrag;  
                   break;  
      
                   case 'verzeichnisse':  
                      if (is_dir("$pfad/$ein_eintrag") && !preg_match('~^\.\.?$~', $ein_eintrag))  
                         $liste[] = $rekursiv ? "$pfad/$ein_eintrag" : $ein_eintrag;  
                   break;  
      
                   default:  
                      if (!preg_match('~^\.\.?$~', $ein_eintrag))  
                      $liste[] = $rekursiv ? "$pfad/$ein_eintrag" : $ein_eintrag;  
                   }  
             // Unterverzeichnisse?  
             if(!preg_match('~^\.\.?$~', $ein_eintrag) && is_dir("$pfad/$ein_eintrag") && $rekursiv)  
                {  
                $liste2 = verzeichnis_auslesen("$pfad/$ein_eintrag", $welche, $rekursiv);  
                foreach($liste2 as $ein_eintrag2) $liste[] = $ein_eintrag2;  
                }  
             }  
          closedir($lesezugriff);  
          sort($liste);  
          return $liste;  
          }  
      
    $pfad = isset($_GET['pfad']) ? $_GET['pfad'] : '.';  
    if ($pfad == '') $pfad = '.';  
    $welche = isset($_GET['welche']) ? $_GET['welche'] : 'alle';  
    $rekursiv = isset($_GET['rekursiv']);  
      
    ?>  
    <html>  
        <head>  
            <title>Verzeichnis auslesen</title>  
        </head>  
        <body>  
            <form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="get">  
            <p>Pfad: <input name="pfad" type="text" /> |  
            <select name="welche">  
                <option value="">anzuzeigen</option>  
                <option value="alle">alles</option>  
                <option value="verzeichnis">nur Verzeichnisse</option>  
                <option value="dateien">nur Dateien</option>  
            </select> | rekursiv <input name="rekursiv" type="checkbox" /> <input type="submit" name="button" value="anzeigen" /></p>  
            </form>  
    <?php  
      
    $verzeichnis = isset($_GET['pfad']) ? verzeichnis_auslesen($pfad, $welche, $rekursiv) : false;  
      
    if ($verzeichnis)  
       {  
       echo "<pre>Verzeichnis-Listing:\n";  
       print_r($verzeichnis);  
       echo "</pre>\n";  
       }  
    ?>  
        </body>  
    </html>
    

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.