Suche nach als

Verzeichnis Baum

Auf dieser Seite:

So gebe ich den Inhalt eines Ordners aus (unterschiedliche Lösungsansätze und Ausgabeformen).

Ordner lesen

Ich kann einen Ordner öffnen, lesen und schliessen, als wäre er eine Datei. Dazu erstelle ich einen Ordnerhandle (analog einem Dateihandle) den ich den Funktionen übergebe.

opendir(), readdir(), closedir()

<?php
$dirname = ("Testordner"); // zu durchsuchenden Ordner
$dh = opendir($dirname); // Variable fasst DirectorieHandler analog zu FilePointer
while ($file=readdir($dh)) { // Schleife solange es etwas zu lesen gibt *
  if ($file != "geheim.php") { // gewisse Dateien ausschliessen
    echo "$file<br/>\n"; // zeilenweise ausgeben
  }
}
closedir($dh); // schliessen des Ordners
?>

* Das funktioniert nur so, wenn es keine Datei und keinen Unterordner namens '0' oder 'false' hat!
Zudem werden nicht nur Dateien, sondern auch Ordnernamen ausgegeben. Inhalte dieser Unterordner werden aber nicht angezeigt.

Diese einfache, zeilenweise Ausgabe des Ordnerinhaltes wird weiter unten durch Einrückungen oder durch Bildchen von Ordner- und Dateisymbolen, oder als Linkliste besser dargestellt. Auch werde ich die Inhalte der gefundenen Unterordner auflisten.

.
..
file.php
datei.php
Ordner
treeicon_ordner.png
dokument.php
noextension
Text.txt
Folder
treeicon_file.png

Die php Klasse dir()

dir()

PHP hat eine Klasse vordefiniert die heisst 'dir()' und ist sehr praktisch.

Ihre Eigenschaften (Variablen) sind 'handle' - Zugriffsnummer und 'path' - der Pfad des aktuellen Verzeichnis.
Ihre Methoden (Funktionen) sind:

<?php
// aus der Klasse dir wird das Objekt $verzeichnis instanziiert
$verzeichnis = dir ("Testordner"); // zu durchsuchendes Verzeichnis

// das Objekt $verzeichnis wird der Methode read übergeben
while ($eintrag = $verzeichnis->read()) {
  if ($eintrag != "." && $eintrag != ".." && $eintrag != "geheim.php") { // mit && einiges ausschliessen

// falls kein Punkt im String 
    if (strpos($eintrag,".") == 0){    
      echo "<img src='images/treeicon_ordner.png' alt=''/> ";
    } else {
      echo "<img src='images/treeicon_file.png' alt=''/> ";
    }
    echo "$eintrag<br>\n";
  }
}
$verzeichnis->close();
?>

file.php
datei.php
Ordner
treeicon_ordner.png
dokument.php
noextension
Text.txt
Folder
treeicon_file.png

Nicht täuschen lassen: die Reihenfolge der Einträge wird je nach Server unterschiedlich unsortiert und Ordner sind nicht daran zu erkennen, dass sie keine Dateiendung, also keinen Punkt im Namen haben.

Geordnetes Verzeichnis

<?php
$path = ".";                                 // aktueler Ordner, also php
$dh = @opendir($path);

while (false !== ($file=readdir($dh)))       // funktioniert auch bei Files namens '0' oder 'false'
{
  if (is_file($file))                        // nur Files
  $files[] = array(filemtime($file),$file);  // 2-D Array
}
closedir($dh);

if ($files)
{
  rsort($files);                             // rückwärts sortieren!
  $count = 1;                                // Zähler Startwert
  foreach ($files as $file)
  {
    if (strpos($file[1],".php") == true && $file[1] != 'geheim.php') // Ausschluss
    {
// file[0] ist Unix timestamp - file[1] ist filename
      echo date('d.m.Y', $file[0]).": $file[1]<br />\n";
      $count++;                              // Zähler um 1 erhöhen
      if ($count >10) { break; }             // nach 10 das Script abbrechen
    }
  }
}
?>

Die 10 frischesten (kürzlich revidierten) Dateien im Teil PHP sind:

19.05.2012: img_resize_script.php
19.05.2012: funktion.php
19.05.2012: datei.php
19.05.2012: standard.php
19.05.2012: syntax.php
19.05.2012: array_numerisch.php
19.05.2012: array_asso.php
18.05.2012: index.php
18.05.2012: variable_funktion.php
18.05.2012: schleife.php

Nur Bilder

<?php
$dir = opendir ("images");
while (false !== ($file = readdir($dir))) 
{
  if (strpos($file, '.gif',1)||strpos($file, '.jpg',1)||strpos($file, '.png',1) ) 
  {
    echo "<img src='images/".$file."' alt='Thumbnail' width='20px' height='20px' /> ";
    echo "$file <br />";
  }
}
?>
Thumbnail MySQL_konsole_01.gif
Thumbnail tabelle_csv.gif
Thumbnail fl_gb.gif
Thumbnail tabelle_explorer.gif
Thumbnail treeicon_ordner_small.png
Thumbnail tabelle_exel.gif
Thumbnail fl_de.gif
Thumbnail myAdmin_anzeige.gif
Thumbnail treeicon_file.png
Thumbnail treeicon_ordner.png

Verlinkte Liste mit Unterordner

Die Liste verlinkt nur Dateien, keine Ordner, denn in denen müsste es sonst zwingend index-Dateien haben.

<?php
// Funktion
function list_dir($dir_handle,$path)
{
    echo "<ol>";
    //running the while loop
    while (false !== ($file = readdir($dir_handle))) {
        $dir =$path.'/'.$file;
        if(is_dir($dir) && $file != '.' && $file !='..' ) // Falls dies ein Ordner ist
        {
            $handle = @opendir($dir) or die("unable to open file $file");
            echo "<li><strong>$file</strong></li>";
            list_dir($handle, $dir); // startet Funktion erneut im Innern des Ordners
        }
        elseif($file != '.' && $file !='..' && $file !='geheim.php') // Falls dies kein Ordner ist
        {
            echo "<li><a href='".$dir."'>$file</a></li>";
        }
    }
    echo "</ol>";

    // Ordner schliessen
    closedir($dir_handle);
}

// von hier aus relativer Pfad zum Ordner angeben
$path = "Testordner";

// Ordner öffnen, Funktion starten
$dir_handle = @opendir($path) or die("Unable to open $path");
list_dir($dir_handle,$path);
?>
  1. file.php
  2. datei.php
  3. Ordner
    1. datei_imOrdner.php
    2. file_imOrdner.php
    3. Text_imOrdner.txt
    4. dokument_imOrdner.php
  4. treeicon_ordner.png
  5. dokument.php
  6. noextension
  7. Text.txt
  8. Folder
    1. dokument_imFolder.php
    2. Text_imFolder.txt
    3. datei_imFolder.php
    4. file_imFolder.php
  9. treeicon_file.png

Mehrdimensionaler Array

Ein mehrdimensionaler Array, geladen mit dem Ordner- und Unterordnerinhalt, bietet mehr Möglichkeiten zur weiteren Analyse, Manipulation oder Ausgabe.

<?php
function MakeDirArray($dir = "Testordner")
{
  $listDir = array();
  if($handler = opendir($dir)) 
  {
    while (($sub = readdir($handler)) !== FALSE) {
      if ($sub != "." && $sub != ".." && $sub != "geheim.php") {
        if(is_file($dir."/".$sub)) {
          $listDir[] = $sub;
        } elseif(is_dir($dir."/".$sub)) {
          $listDir[$sub] = MakeDirArray($dir."/".$sub);
        }
      }
    }   
    closedir($handler);
  }
  return $listDir;   
}
// Funktion aufrufen
$listDir = MakeDirArray();
// Ausgeben
 print '<pre>';
 print_r ($listDir); // Test
 print '</pre>';
?>
Array
(
    [0] => file.php
    [1] => datei.php
    [Ordner] => Array
        (
            [0] => datei_imOrdner.php
            [1] => file_imOrdner.php
            [2] => Text_imOrdner.txt
            [3] => dokument_imOrdner.php
        )

    [2] => treeicon_ordner.png
    [3] => dokument.php
    [4] => noextension
    [5] => Text.txt
    [Folder] => Array
        (
            [0] => dokument_imFolder.php
            [1] => Text_imFolder.txt
            [2] => datei_imFolder.php
            [3] => file_imFolder.php
        )

    [6] => treeicon_file.png
)

Einfacher Array

Weil die Angaben wie Namen von Ordner und Unterordner bereits im Pfad vorhanden sind, liessen sich daraus Gruppierungen auch erst bei einer Ausgabe erstellen. Dann würde ein einfacherer Array in der Praxis vorläufig genügen, zumal ein einfacher Array auch leichter mit einem bestehenden Array zu vergleichen ist.

<?php
// Erste Ebene
function MakeDirArraySimple($dir)
{
  $listFiles = array();
  if($handler = opendir($dir)) {
    while (($sub = readdir($handler)) !== FALSE) {
      if ($sub != "." && $sub != ".." && $sub != "geheim.php") {
        if(is_file($dir."/".$sub)) {
          $ziel = realpath($dir."/".$sub);
          $listFiles[] = $ziel;

// Zweite Ebene (dies geht nur eine Unterebene tief)
        } elseif(is_dir($dir."/".$sub)) {
          $path = $dir."/".$sub;
          if($handler2 = opendir($path)) {
            while (($sub = readdir($handler2)) !== FALSE) {
              if ($sub != "." && $sub != ".." && $sub != "geheim.php") {
                if(is_file($path."/".$sub)) {
                $ziel = realpath($path."/".$sub);
                  $listFiles[] = $ziel;
            }}} closedir($handler2);
    }}}}   
    closedir($handler);
  }
  return $listFiles;
}

$dir = "Testordner";
$listFiles = MakeDirArraySimple($dir);

print '<pre>';
  print_r ($listFiles); // Test
print '</pre>';
?>
Array
(
    [0] => /home/bieferc/www/lehrling/php/Testordner/file.php
    [1] => /home/bieferc/www/lehrling/php/Testordner/datei.php
    [2] => /home/bieferc/www/lehrling/php/Testordner/Ordner/datei_imOrdner.php
    [3] => /home/bieferc/www/lehrling/php/Testordner/Ordner/geheim.php
    [4] => /home/bieferc/www/lehrling/php/Testordner/Ordner/file_imOrdner.php
    [5] => /home/bieferc/www/lehrling/php/Testordner/Ordner/Text_imOrdner.txt
    [6] => /home/bieferc/www/lehrling/php/Testordner/Ordner/dokument_imOrdner.php
    [7] => /home/bieferc/www/lehrling/php/Testordner/treeicon_ordner.png
    [8] => /home/bieferc/www/lehrling/php/Testordner/dokument.php
    [9] => /home/bieferc/www/lehrling/php/Testordner/noextension
    [10] => /home/bieferc/www/lehrling/php/Testordner/Text.txt
    [11] => /home/bieferc/www/lehrling/php/Testordner/Folder/geheim.php
    [12] => /home/bieferc/www/lehrling/php/Testordner/Folder/dokument_imFolder.php
    [13] => /home/bieferc/www/lehrling/php/Testordner/Folder/Text_imFolder.txt
    [14] => /home/bieferc/www/lehrling/php/Testordner/Folder/datei_imFolder.php
    [15] => /home/bieferc/www/lehrling/php/Testordner/Folder/file_imFolder.php
    [16] => /home/bieferc/www/lehrling/php/Testordner/treeicon_file.png
)


Valid XHTML 1.0 Check den Code.

Cloud >> << SERVER und Pfade
Ich bin hier: > PHP Lehrling >>> Verzeichnis Baum
 
HTML und XHTML | CSS | JavaScript und DHTML | PHP und MySQL | Andere Sprachen
Letzter Update: 03.11.2010