PHP: Einführung für Anfänger


* Einführung * Installation * Paketmanager * Grundlagen * Shells * Entwicklung * KDE * Skriptsprachen * AWK * PHP * Perl * Apache * Veranstaltungen * Schulungen * Bücher * Netzwerk * OpenOffice * OpenSource * Samba

PHP


© <a href="http://www.fotolia.de/p/29003">Ljupco Smokovski</a> - FOTOLIA
Home
PHP von der Kommandozeile
PHP und HTML im Zusammenspiel
Variablen und Zuweisungen
Arrays
Vergleichsoperatoren
Verzweigungen
Schleifen
Funktionen
Datei schreiben
Datei lesen
Formulare verarbeiten
Sortieren von Dateinamen
Anzeige:

PHP Kurse für
Anfänger und Fortgeschrittene

Kontakt
Haftung
Impressum
Problem Hilfe Startseite


Sortierte Ausgabe von Dateien


Der Befehl readdir() von PHP listet den kompletten Inhalt eines Verzeichnisses auf. Auch wenn es in bestimmten Implementierungen von PHP so aussieht, als wäre die Ausgabe entsprechend der "mtime" (Zeit der letzten Modiffikation) sortiert, so gibt es hierbei laut Sprachbeschreibung keine Regel. Man sollte also keinesfalls eine möglicherweise in einer bestimmen Implementierung vorhandene Eigenschaft benutzen. Bei einem Serverwechsel wäre dann zum Beispiel die Sortierreihenfolge anders.

Die Funktion filenames_in_directory($dir, $criteria, &$res, $order="ascending"), die im folgenden aufgelistet ist, gibt ein Array mit den Dateinamen (also nur die Dateinamen und keine Unterverzeichnisse) zurück. Ist der Parameter $order auf ascending gesetzt, werden die Namen in aufsteigender Ordnung sortiert, ansonsten werden sie in absteigender (descending) Sortierung zurückgeliefert.
Mit dem Parameter $criteria kann man bestimmen, ob man eine zeitliche Sortierung, also $criteria="time",  oder eine alphabetische Sortierung, also $criteria="alpha", wünscht.

function filenames_in_directory($dir, $criteria, &$res, $order="ascending") {
  $count =0;
  $handle=opendir($dir);
  while (($file = readdir($handle))!==false) {
    /* possible return values for filetype():
        fifo, char, dir, block, link, file, unknown */
    if (filetype("$dir/$file")=="file") { // no subdirectories e.g.
      // "if" makes sure that no subdirectories
      // and the directory "." and ".." are listed
      if ($criteria == "time") {
        $file_time = filemtime("$dir/$file"); // time of last modification
        $tfilenames[$file] = $file_time;
      } else if ($criteria == "alpha") { // alphabetical listing.
        $filenames[$count] = $file;
      }
      $count++;
    }
  }
  closedir($handle);

  $i = 0;
  if ($criteria == "time") {
    if ($order == "ascending") {
      asort($tfilenames);
    } else {
      arsort($tfilenames);
    }
    while(list($key, $val) = each($tfilenames)){
      $res[$i] = $key;
      $i++;
    } 
  }  else if ($criteria == "alpha") {
    if ($order == "ascending") {
      asort($filenames);
    } else {
      arsort($filenames);
    }
    while(list($key, $val) = each($filenames)){
      $res[$i] = $val;
      $i++;
    }
 }
 return $i;
}

Ein Aufruf des obigen Skriptes sieht wie folgt aus:
$number_of_filenames_in_dir = filenames_in_directory($path, "time", &$files, "ascending");
while(list($key, $file) = each($files)){
  echo "$file\n";
}

Dabei werden alle Dateinamen des Unterverzeichnisses $path in zeitlich aufsteigender Reihenfolge ausgedruckt.

© Copyright 2007 - 2010, Bernd Klein mit freundlicher Unterstützung von Bodenseo, Linux-Kurse und Schulungen,
Foto linke Seite (Mann mit Strick und Colt): Foto: © Ljupco Smokovski, fotolia 984022