PHP 4.3

11.3.1.1 Durch Verzeichnisse navigieren 1

Um auf Basis des vorangegangenen Beispiels ein Skript zu entwickeln, welches es Ihnen ermöglicht, durch eine gesamte Verzeichnisstruktur zu navigieren, muss das Argument der Funktion opendir() zur Laufzeit bestimmt werden. Weiterhin müssen Sie wissen, bei welchen Einträgen es sich um ein Verzeichnis handelt. Der Versuch, eine normale Datei mit opendir() zu öffnen, würde logischerweise eine Fehlermeldung liefern.

Um die Art eines Eintrages zu prüfen, bieten sich mit PHP zwei Wege an: die Funktion is_dir() liefert den Boolean true zurück, wenn es sich bei dem jeweiligen Eintrag um ein Verzeichnis handelt. Die Funktion filetype() gibt den String "file" zurück, sofern es sich bei dem geprüften Eintrag um eine Datei handelt.

is_dir(Pfadname); Boolean, der zurückliefert, ob der betreffende Eintrag ein Verzeichnis ist. Dabei wird wie bei allen Dateinamen entweder der absolute Pfad angegeben, also alle ihm übergeordneten Verzeichnisse bis zum Wurzelverzeichnis oder der relative Pfad, ausgehend von dem Verzeichnis, in dem das laufende Skript ausgeführt wird.
filetype(Pfadname); Untersucht Dateitypen und liefert den Typ des Verzeichniseintrages als String zurück. Dateien werden standardmäßig mit file bezeichnet, Verzeichnisse mit dir. Für Einträge, die nicht erkannt werden, liefert die Funktion false zurück.
getcwd(); Ermittelt den absoluten Pfad des aktuell ausgeführten Skripts.

Anmerkung zum Beispielskript: Wenn Sie keine Leserechte haben für höherliegende Verzeichnisse als das, in dem das Skript ausgeführt wird, dann sollten Sie einige Unterverzeichnisse in diesem Verzeichnis anlegen, um die Funktionsweise des Skripts nachvollziehen zu können.



Beispielskript Verzeichnisnavigation
<?php

  $current_dir = $HTTP_GET_VARS["current_dir"];
  if (empty($current_dir)) {
    $current_dir = getcwd();
  }
  $dir = opendir($current_dir);
  while($entry = readdir($dir)) {
    if($entry == ".") {
      continue;
    }

    $new_dir = $current_dir . "/" . $entry;

    if(is_dir($new_dir)) {
      echo "<a href=\"" . $PHP_SELF . "?current_dir=" . urlencode($new_dir) . "\"><b>" . $entry . "</b></a><br>\n";
    } else {
      echo "<b>" . $entry . "</b><br>\n";
    }
  }
   closedir($dir);

?>

Da die Variable $current_dir, der wir später das vom Benutzer gewünschte Verzeichnis zuweisen werden, beim ersten Aufruf noch keinen Wert besitzt, ermitteln wir mit der Funktion getcwd() zuerst den kompletten Pfad, in dem sich das ausgeführte Skript befindet.

Anschließend wird, wie schon im ersten Beispiel, mittels einer while-Schleife das mit opendir() geöffnete Verzeichnis ausgelesen.
Der Verweis auf das aktuelle Verzeichnis (".") wird mit continue übersprungen. Anschließend wird die Variable $new_dir initialisiert. Der Wert setzt sich aus dem Wert von $current_dir, einem Schrägstrich und dem aktuell ausgelesenen Verzeichniseintrag $entry zusammen. Dies ist notwendig, da die nachfolgende Funktion is_dir() eine vollständige Pfadangabe benötigt.
$new_dir wird als Parameter der PHP-Funktion is_dir() übergeben, die nun prüft, ob es sich bei dem Eintrag um ein Verzeichnis handelt. Liefert is_dir() den booleschen Ausdruck true zurück, wird ein Link gebildet, der es Ihnen ermöglicht, das nächste höher- oder tieferliegende Verzeichnis anzusteuern. Alle anderen Einträge werden in einfacher Form abgebildet.

Wie Sie sehen können, haben wir an dieser Stelle erneut die PHP-Funktion urlencode() eingesetzt, da Verzeichnisnamen Leer- und Sonderzeichen enthalten können.

Leider ist dieses Skript noch nicht ganz ausgereift. Wenn Sie ein höherliegendes Verzeichnis ansteuern möchten, werden Sie feststellen, dass unser Skript anfängt, endlose Einträge zu konstruieren. Es fügt an das Ende der Verzeichnis-Zeichenkette das ".."-Element an. An dieser Stelle muss darauf hingewiesen werden, dass durch dieses Verfahren sehr lange URLs erzeugt werden können. Viele Werbserver unterstützen jedoch nur URLs einer begrenzten Länge.

Kommentare (0)

Ihr Kommentar

Name